Разделение интерфейса WPF на несколько файлов Xaml

Я пытаюсь создать пользовательский интерфейс с помощью XAML. Однако файл быстро становится очень большим, и с ним трудно работать. Как лучше всего разделить его на несколько файлов.

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

Благодарность

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
54
0
29 267
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете разделить файлы XAML с помощью ResourceDictionary. ResourceDictionary можно использовать для объединения других файлов:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source = "myresourcedictionary.xaml"/>
      <ResourceDictionary Source = "myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

В ResourceDictionary вы также можете объявить стили, которые вы можете использовать в своих элементах, так что основной файл XAML станет меньше.

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

Да, прямой ответ. Он также работает с <Window.Resources>

Goodies 10.06.2016 22:19

Используйте стили и пользовательские элементы управления. Разделите свой интерфейс на более мелкие части и закодируйте их в других файлах 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, который отображал данные в вашем пользовательском элементе управления.

Вы также можете создать Страница вместо UserControl. Page может размещаться на Window или на Рамка. Найдите плюсы и минусы Page и UserControl. Это немного зависит от ваших требований в отношении навигации, которая лучше всего соответствует вашим потребностям.

Вот пример использования страницы во фрейме.

Другие вопросы по теме