我想建立一个新的自定义控件.我发现很少的教程给了我一些如何实现这一点的线索.据了解,创建新的自定义控件始终通过扩展当前的自定义控件来实现,甚至可以扩展
从层次结构的基本层次的控制,例如,你甚至可以扩展:
> UIElement
> FrameworkElement
>控制
> ContentControl
> headeredContentControl
> ItemsControl
>选择器
> RangeBase
如以下教程所写: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>
假设couse我有一个元素与填充属性在我的
ControlTemplate命名为x:name =“leftTraingularIndicator”
问题:
现在我想在我的XAML对IsMouseDown做出反应.我怎么做?
没有“IsMouseDown”触发器.此外,如果我想要的话
在代码背后做出反应?更进一步如果我想要的
要将leftTraingularIndicator“Fill”从代码改成后面?
>与视觉的一部分的子元素相关的事件
我的ControlTemplate的构造,如果我想反应如何
到XAML中的“leftTraigularIndicator”的“IsMouSEOver”还是甚至在Code Behind中?
也许甚至两者.
我现在试图呆了2天…感觉我在理解事情的工作方面缺少一些东西.没有找到任何深入解释这些问题的教程.
我想看看我在这里出现的每个问题的几行示例.
谢谢.
解决方法 经过广泛的研究…1)向外界公布事件
就好像你正在从任何其他类暴露出来.
public delegate voID myDelegate(int someValue); public event myDelegate myEvent;
在你的代码的某个地方:
if(myEvent!=null) myEvent(5);
那部分没什么新鲜事
2)从后面的代码创建一个实例构造函数
public MyCustomControl(){ MouseMove += MyCustomControl_MouseMove;}voID MyCustomControl_MouseMove(object sender,MouseEventArgs e){ //Now you can react to the movement of the mouse. //if for example I want to address an element,let's say a rectangle: var ele = (Rectangle)Template.Findname("myRect",this); ele.Fill=myNewBrush; // provIDed that we have an element named "myRect" (x:name="myRect") in // the generic.xaml style->Control Template-> which corresponds to that name.}
3)不推荐 – 因为它属于用户控件的范围而不是自定义控件.
自定义控件是“原子”,用户控件更适合于目的
组合控制.
但不是不可能
var mybutton = (button)Template.Findname("mybutton",this);mybutton.OnMouseMove += ....
请记住:
>代码隐藏中应该知道的任何东西都必须命名.
>你的xaml应该不知道代码背后的做法. (除了! – 继续阅读)
>代码隐藏中应该知道的部分必须具有正确的名称
你设计你的XAML.
我真的希望这将有助于其他人在试图发展时获得“墙”自己的自定义控件.
总结以上是内存溢出为你收集整理的c# – WPF自定义控件构造,触发器和事件全部内容,希望文章能够帮你解决c# – WPF自定义控件构造,触发器和事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)