Я пытаюсь создать пользовательский интерфейс с помощью XAML. Однако файл быстро становится очень большим, и с ним трудно работать. Как лучше всего разделить его на несколько файлов.
Я хотел бы иметь возможность установить содержимое элемента, такого как ComboBox, для элемента, который определен в другом файле xaml (но в том же проекте VS).
Благодарность





Вы можете разделить файлы XAML с помощью ResourceDictionary. ResourceDictionary можно использовать для объединения других файлов:
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source = "myresourcedictionary.xaml"/>
<ResourceDictionary Source = "myresourcedictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
В ResourceDictionary вы также можете объявить стили, которые вы можете использовать в своих элементах, так что основной файл XAML станет меньше.
Другая возможность получить файл XAML меньшего размера - определить собственные элементы управления, которые затем будут использоваться в основном приложении.
Используйте стили и пользовательские элементы управления. Разделите свой интерфейс на более мелкие части и закодируйте их в других файлах xaml. Пример:
<Window>
<VeryBigControl>
<VeryBigControl.Style>
... <!--very long style-->
</VeryBigControl.Style>
.. <!--content of very big control-->
</VeryBigControl
</Window>
разделите его на три файла xaml:
Window.xaml - это будет Window
VeryBigControl.xaml - это будет UserControl
VeryBigControlStyle.xaml - это будет ресурсный словарь
и так далее :)
Вы можете разделить большой пользовательский интерфейс, определив UserControls.
Щелкните правой кнопкой мыши дерево решений, выберите «Добавить» -> «Новый элемент» ... затем «Пользовательский элемент управления». Вы можете оформить это обычным способом.
Затем вы можете ссылаться на свой пользовательский элемент управления в XAML, используя объявление пространства имен. Допустим, вы хотите включить свой UserControl в окно. В следующем примере я добавил UserControl с именем «Foo» в пространство имен «YourCompany.Controls»:
<Window x:Class = "YourCompany.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls = "clr-namespace:YourCompany.Controls">
<Controls:Foo ... />
В вашем конкретном примере вы могли бы использовать свой пользовательский элемент управления в поле со списком, определив DataTemplate, который отображал данные в вашем пользовательском элементе управления.
Да, прямой ответ. Он также работает с <Window.Resources>