Как разбить большой файл XAML на файлы, расположенные ниже XAML, и поддерживать связь между родительским и дочерним объектами? - PullRequest
3 голосов
/ 08 марта 2012

Я новичок в WPF.Я пытаюсь изменить проект VisualStudioLikePanes из книги WPF 4 Unleashed.Поскольку панели по умолчанию скрыты до запуска проекта, я решил, что было бы неплохо поместить панель, над которой я работаю, в отдельный файл xaml, чтобы я мог видеть изменения, вносимые в панель, без необходимости запускаисполняемый файл.

Итак, основываясь на некоторых постах, которые я прочитал здесь на StackOverflow несколько дней назад, я добавил новый UserControl в пример проекта и добавил в него содержимое соответствующей панели.Вот как выглядят атрибуты UserControl в «дочернем» XAML-файле:

<UserControl x:Class="Sample.SettingsPanel"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d">

Чтобы включить этот элемент управления в родительский, я добавил пространство имен xmlns: sp в «родительский» XAML-файл:

<Window
    Title="MainWindow"
    x:Uid="Window_1" x:Class="Sample.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sp="clr-namespace:Sample"
    x:Name="window">

Затем я «включил» элемент управления с помощью этого:

<sp:SettingsPanel Visibility="Collapsed" x:Name="layer1" x:FieldModifier="private" />

Я сразу обнаружил, что в файле с выделенным кодом для «родительского» файла XAML весь код, который сделалссылка на любой из элементов, теперь содержащихся в «дочернем» XAML-файле, теперь не распознана.Затем я удалил (или закомментировал) все ссылки на имена и объекты, которые теперь содержались в «дочернем» файле XAML и с тех пор прыгают через обручи, чтобы связать вещи обратно.

Например,Я хочу, чтобы один TextBox в «дочернем» XAML-файле отражал то, что находится в TextBox в «родительском» XAML-файле.Я считаю, что следующая привязка будет работать, но, конечно, я не могу поместить это в «дочерний» XAML, потому что он больше не «знает» об элементе «test» родителя.

<TextBox Text="{Binding ElementName=test, Path=Text}" />

Я уверен, что неправильно разбил родительский XAML-файл.Я не могу себе представить, что каждый раз, когда кто-то хочет разбить какой-то сегмент XAML на другой файл, он должен переделывать весь свой код и настраивать специальные средства связи, чтобы элементы продолжали общаться.

Я смотрел наразличные сообщения (например, Привязка двух пользовательских элементов управления к одному и тому же DataContext или ViewModel? и Какой самый простой способ разбить большие файлы XAML в моем приложении? ), но они этого не сделалине отвечайте на мой конкретный вопрос.

Спасибо,

Мэтт

1 Ответ

1 голос
/ 11 мая 2012

Когда вы разделяете свои элементы на UserControl, вы все равно можете получить к ним доступ по указанному вами значению поля x: Name. Однако, поскольку вы новичок в WPF, я бы начал изучать модель MVVM, прежде чем вы начнете развивать какие-либо «вредные привычки». Это конкретно решает ваши проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...