Пользовательские элементы управления WPF
Я хочу создать новый настраиваемый элемент управления. Я нашел несколько руководств, которые дали мне некоторое представление о том, как достичь этого. Как я понимаю, создание нового настраиваемого элемента управления всегда осуществляется путем расширения текущего, и даже возможно расширить его элемент управления с самых базовых уровней иерархии, например, вы можете даже расширить:
- UIElement
- FrameworkElement
- Управление
- ContentControl
- HeaderedContentControl
- ItemsControl
- Селектор
- RangeBase
Как написано в следующем учебнике: http://wpftutorial.net/HowToCreateACustomControl.html
Итак, я последовал за учебником и создал новый проект типа Custom Control Library, получил мой общий .xaml и мой код. Пока все хорошо.
Есть 3 типа или категории событий, которые я могу различать.
-
События, которые расходуются в окне (или контейнере), которые будут использовать мой элемент управления: это события, которые я хотел бы открыть снаружи. Как их написать?
-
События, связанные с самим элементом управления и не находящиеся снаружи; например, если мышь находится над моим контролем, и я хотел бы реагировать к тому, что. Я могу сделать это в XAML:
<ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Fill" TargetName="LeftTraingularIndicator"> <Setter.Value> <SolidColorBrush Color="Yellow" /> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers>
Предполагая, что у меня есть элемент с свойством fill в моем ControlTemplate, который называется x: name= "LeftTraingularIndicator"
Вопросы:
Теперь я хочу реагировать в своем XAML на IsMouseDown. Как мне это сделать? Триггера IsMouseDown отсутствует. Кроме того, что, если я хочу реагировать на это в коде? И еще дальше, что, если я хочу изменить LeftTraingularIndicator "Заполнить" из кода позади?
- События, связанные с подэлементами, которые являются частью визуального построение моего ControlTemplate, например, что, если я хочу реагировать в "IsMouseOver" из "LeftTraigularIndicator" в XAML/или даже в коде за кодом? Возможно даже оба.
Я пытаюсь в течение 2 дней... чувствую, что мне не хватает чего-то в моем понимании того, как все работает. Не нашел ни одного учебника, который бы глубоко объяснил эти вопросы.
Я хотел бы увидеть несколько строк примера для каждого из вопросов, которые я нашел здесь.
Спасибо.