我想构建一个新的自定义控件。我发现很少有教程给了我一些关于如何实现这一点的线索。据我了解,创建新的自定义控件总是通过扩展当前控件来完成,甚至可以从层次结构的最基本级别扩展控件,例如,您甚至可以扩展:
- 界面元素
- 框架元素
- 控制
- 内容控制
- 标头内容控件
- 项目控制
- 选择器
- 范围基础
如以下教程中所写:http ://wpftutorial.net/HowToCreateACustomControl.html
所以,我按照教程创建了一个自定义控件库类型的新项目,得到了我的通用 .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>
假设我的 ControlTemplate 中有一个带有 fill 属性的元素,名为 x:name="LeftTraingularIndicator"
问题:
现在我想在我的 XAML 中对 IsMouseDown 做出反应。我怎么做?没有“IsMouseDown”触发器。此外,如果我想在后面的代码中对此做出反应怎么办?更进一步,如果我想从后面的代码中更改 LeftTraingularIndicator "Fill" 怎么办?
- 与子元素相关的事件,这些子元素是我的 ControlTemplate 的可视化结构的一部分,例如,如果我想对 XAML/甚至代码隐藏中的“LeftTraigularIndicator”的“IsMouseOver”做出反应怎么办?甚至可能两者兼而有之。
我现在正在尝试 2 天......感觉我在理解事物的运作方式时遗漏了一些东西。没有找到任何深入解释这些问题的教程。
对于我在这里提出的每个问题,我想看几行示例。
谢谢。