c# – WPF自定义控件构造,触发器和事件
WPF自定义控件
我想建立一个新的自定义控件.我发现很少的教程给了我一些如何实现这一点的线索.据了解,创建新的自定义控件始终通过扩展当前的自定义控件来实现,甚至可以扩展 > UIElement 如以下教程所写:http://wpftutorial.net/HowToCreateACustomControl.html 所以,我遵循了这个教程,并创建了一个新的自定义控件库项目,得到了我的通用.xaml和我的代码.到现在为止还挺好. 有3种类型的事件我可以区分. >可以使用我的控件的窗口(或容器)消耗的事件:那些是我想要暴露给外部的事件.怎么写那些? <ControlTemplate.Triggers> <Trigger Property="IsMouSEOver" Value="true"> <Setter Property="Fill" TargetName="LeftTraingularIndicator"> <Setter.Value> <SolidColorBrush Color="Yellow" /> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers> 假设couse我有一个元素与填充属性在我的 问题: 现在我想在我的XAML对IsMouseDown做出反应.我怎么做? >与视觉的一部分的子元素相关的事件 我现在试图呆了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 += .... 请记住: >代码隐藏中应该知道的任何东西都必须命名. 我真的希望这将有助于其他人在试图发展时获得“墙”自己的自定义控件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |