c# – WPF自定义控件构造,触发器和事件

c# – WPF自定义控件构造,触发器和事件,第1张

概述WPF自定义控件 我想建立一个新的自定义控件.我发现很少的教程给了我一些如何实现这一点的线索.据了解,创建新的自定义控件始终通过扩展当前的自定义控件来实现,甚至可以扩展 从层次结构的基本层次的控制,例如,你甚至可以扩展: > UIElement > FrameworkElement >控制 > ContentControl > HeaderedContentControl > ItemsContr WPF自定义控件

我想建立一个新的自定义控件.我发现很少的教程给了我一些如何实现这一点的线索.据了解,创建新的自定义控件始终通过扩展当前的自定义控件来实现,甚至可以扩展
从层次结构的基本层次的控制,例如,你甚至可以扩展:

> 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自定义控件构造,触发器和事件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238858.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存