Можно ли установить код за словарь ресурсов в WPF. Например, в пользовательском контроле для кнопки вы объявляете ее в XAML. Код обработки события для нажатия кнопки выполняется в файле кода за элементом управления. Если бы мне нужно было создать шаблон данных с кнопкой, как я могу написать код обработчика событий для его нажатия кнопки в словаре ресурсов.
147
Ответы:
Я думаю, что вы спрашиваете, что вы хотите файл с выделенным кодом для ResourceDictionary. Вы можете полностью сделать это! На самом деле, вы делаете это так же, как для окна:
Скажем, у вас есть ResourceDictionary под названием MyResourceDictionary. В вашем файле MyResourceDictionary.xaml поместите атрибут x: Class в корневой элемент, например, так:
Затем создайте код для файла MyResourceDictionary.xaml.cs со следующим объявлением:
И вы сделали. Вы можете поместить в код все, что пожелаете: методы, свойства и обработчики событий.
== Обновление для приложений Windows 10 ==
И на случай, если вы играете с UWP, есть еще одна вещь, о которой нужно знать:
источник
x:Class="MyCompany.MyProject.MySubFolder1.MyResourceDictionary"
В противном случае, если вы просто введете x: Class = "MyResourceDictionary", парсер xaml не найдет ваш класс.Я не согласен с «ageektrapped» ... использование метода частичного класса не является хорошей практикой. Какова будет цель отделения словаря от страницы?
Из выделенного кода вы можете получить доступ к элементу ax: Name, используя:
Вы можете сделать это в методе OnApplyTemplate, если хотите подключиться к элементам управления при загрузке пользовательского элемента управления. OnApplyTemplate должен быть переопределен, чтобы сделать это. Это обычная практика, которая позволяет вашему стилю оставаться оторванным от контроля. (Стиль не должен зависеть от элемента управления, но элемент управления должен зависеть от наличия стиля).
источник
Гишу - хотя это может показаться "обычно не поощряемой практикой". Вот одна из причин, по которой вы можете захотеть сделать это:
Стандартное поведение для текстовых полей, когда они получают фокус, заключается в том, что курсор помещается в то же положение, в котором он находился, когда элемент управления терял фокус. Если вы предпочитаете во всем приложении, чтобы, когда пользователь вкладывал в любое текстовое поле, было выделено все содержимое текстового поля, то добавление простого обработчика в словаре ресурсов могло бы помочь.
Любая другая причина, по которой вы хотите, чтобы поведение по умолчанию для взаимодействия с пользователем отличалось от стандартного, кажется хорошим кандидатом на код в словаре ресурсов.
Полностью согласен, что все, что специфично для функциональности приложения, не должно быть в коде позади словаря ресурсов.
источник
XAML предназначен для построения графов объектов, не содержащих код.
Шаблон данных используется для указания того, как пользовательский объект-объект должен отображаться на экране ... (например, если это элемент списка), поведение не является частью области компетенции шаблона данных. Перерисовать решение ...
источник