C# winui 3 перенаправляет событие из элемента управления компонентом в родительский пользовательский элемент управления ⇐ C#
C# winui 3 перенаправляет событие из элемента управления компонентом в родительский пользовательский элемент управления
Используя C# winui 3 (.NET 6), я написал собственный элемент управления CommonButtonControl, состоящий из Button, содержащего Image и TextBlock. Идея состоит в том, что я могу сохранить единообразный внешний вид для всех кнопок в моем приложении и упростить свой xaml, поэтому мне нужно только добавить CommonButtonControl со значениями для ImageSource, < code>Текст и Команда.
Пока все работает нормально, но я также хотел бы добавить событие Click, которое будет запускаться в CommonButtonControl, когда компонент Нажатие кнопки > событие срабатывает. Это должно было бы добавить согласованность со стандартным элементом управления Button и позволить мне перехватывать событие Click из CommonButtonControl, чтобы выполнять такие действия, как показ подтверждения. Прежде чем делать что-либо еще, начните диалог.
Я добавил событие Click в свой класс CommonButtonControl. Однако у меня есть xaml для CommonButtonControl, определенный в DataDictionary (согласно этой документации), и когда я пытаюсь перехватить событие Click для компонент Button, он будет вызывать только код, который находится в коде DataDictionary, а не код, который находится в классе CommonButtonControl. Кажется, нет никакого способа вызвать объект CommonButtonControl, чтобы сообщить ему, что событие компонента Button было запущено, чтобы я мог вызвать CommonButtonControl Click событие. Какие-либо предложения? Кажется концептуально неправильным добавлять RoutedEventHandler в качестве DependencyProperty.
Словарь ресурсов
Код словаря ресурсов
частичный класс DataTemplatesDictionary { общедоступный словарь шаблонов данных() { ИнициализироватьКомпонент(); } частный void Button_Click (отправитель объекта, Microsoft.UI.Xaml.RoutedEventArgs e) { //как перенаправить это в метод OnButtonClick в CommonButtonControl? } } Класс CommonButtonControl
публичный запечатанный класс CommonButtonControl : Control { #участники региона частный DependencyProperty TextProperty = DependencyProperty.Register( имя(текст), тип(строка), тип (CommonButtonControl), новый PropertyMetadata (по умолчанию (строка))); частный DependencyProperty ImageSourceProperty = DependencyProperty.Register( имя(Источник изображения), тип (Источник изображения), тип (CommonButtonControl), новый PropertyMetadata (по умолчанию (ImageSource))); частный DependencyProperty CommandProperty = DependencyProperty.Register( имя(команда), тип(ICommand), тип (CommonButtonControl), новый PropertyMetadata(null)); публичное событие RoutedEventHandler Click; #конечныйрегион #свойства региона Private void OnButtonClick (отправитель объекта, RoutedEventArgs e) { //как мне вызвать этот метод, когда возникает событие нажатия кнопки компонента? Нажмите?.Invoke(this, new()); } общедоступная строка Текст { получить => (строка) GetValue (TextProperty); установить => SetValue(TextProperty, значение); } общедоступный источник изображений { получить => (ImageSource) GetValue (ImageSourceProperty); установить => SetValue(ImageSourceProperty, значение); } общедоступная команда ICommand { получить => (ICommand) GetValue (CommandProperty); установить => SetValue(CommandProperty, значение); } #конечныйрегион общедоступный CommonButtonControl() { this.DefaultStyleKey = typeof(CommonButtonControl); } } Использование 1 – через команду (работает)
Использование 2 – через событие Click (как заставить это работать?)
Используя C# winui 3 (.NET 6), я написал собственный элемент управления CommonButtonControl, состоящий из Button, содержащего Image и TextBlock. Идея состоит в том, что я могу сохранить единообразный внешний вид для всех кнопок в моем приложении и упростить свой xaml, поэтому мне нужно только добавить CommonButtonControl со значениями для ImageSource, < code>Текст и Команда.
Пока все работает нормально, но я также хотел бы добавить событие Click, которое будет запускаться в CommonButtonControl, когда компонент Нажатие кнопки > событие срабатывает. Это должно было бы добавить согласованность со стандартным элементом управления Button и позволить мне перехватывать событие Click из CommonButtonControl, чтобы выполнять такие действия, как показ подтверждения. Прежде чем делать что-либо еще, начните диалог.
Я добавил событие Click в свой класс CommonButtonControl. Однако у меня есть xaml для CommonButtonControl, определенный в DataDictionary (согласно этой документации), и когда я пытаюсь перехватить событие Click для компонент Button, он будет вызывать только код, который находится в коде DataDictionary, а не код, который находится в классе CommonButtonControl. Кажется, нет никакого способа вызвать объект CommonButtonControl, чтобы сообщить ему, что событие компонента Button было запущено, чтобы я мог вызвать CommonButtonControl Click событие. Какие-либо предложения? Кажется концептуально неправильным добавлять RoutedEventHandler в качестве DependencyProperty.
Словарь ресурсов
Код словаря ресурсов
частичный класс DataTemplatesDictionary { общедоступный словарь шаблонов данных() { ИнициализироватьКомпонент(); } частный void Button_Click (отправитель объекта, Microsoft.UI.Xaml.RoutedEventArgs e) { //как перенаправить это в метод OnButtonClick в CommonButtonControl? } } Класс CommonButtonControl
публичный запечатанный класс CommonButtonControl : Control { #участники региона частный DependencyProperty TextProperty = DependencyProperty.Register( имя(текст), тип(строка), тип (CommonButtonControl), новый PropertyMetadata (по умолчанию (строка))); частный DependencyProperty ImageSourceProperty = DependencyProperty.Register( имя(Источник изображения), тип (Источник изображения), тип (CommonButtonControl), новый PropertyMetadata (по умолчанию (ImageSource))); частный DependencyProperty CommandProperty = DependencyProperty.Register( имя(команда), тип(ICommand), тип (CommonButtonControl), новый PropertyMetadata(null)); публичное событие RoutedEventHandler Click; #конечныйрегион #свойства региона Private void OnButtonClick (отправитель объекта, RoutedEventArgs e) { //как мне вызвать этот метод, когда возникает событие нажатия кнопки компонента? Нажмите?.Invoke(this, new()); } общедоступная строка Текст { получить => (строка) GetValue (TextProperty); установить => SetValue(TextProperty, значение); } общедоступный источник изображений { получить => (ImageSource) GetValue (ImageSourceProperty); установить => SetValue(ImageSourceProperty, значение); } общедоступная команда ICommand { получить => (ICommand) GetValue (CommandProperty); установить => SetValue(CommandProperty, значение); } #конечныйрегион общедоступный CommonButtonControl() { this.DefaultStyleKey = typeof(CommonButtonControl); } } Использование 1 – через команду (работает)
Использование 2 – через событие Click (как заставить это работать?)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение