WPF自定义控件的构造,触发器和事件

问题描述 投票:12回答:2

我想建立一个新的自定义控件。我发现很少有教程为我提供了一些实现方法的线索。据我了解,创建新的自定义控件总是通过扩展当前控件来完成的,甚至有可能扩展例如,您甚至可以扩展层次结构中最基本的层次上的控件:

  • UIElement
  • FrameworkElement
  • 控制
  • ContentControl
  • HeaderedContentControl
  • ItemsControl
  • 选择器
  • RangeBase

如以下教程中所写:http://wpftutorial.net/HowToCreateACustomControl.html

因此,我按照本教程创建了一个自定义控件库类型的新项目,得到了我的通用.xaml和代码。到目前为止一切顺利。

我可以区分三种事件类型或类别。

  1. 将使用我的控件的窗口(或容器)可消耗的事件:这些是我想暴露给外部的事件。怎么写?

  2. 与控件本身相关且未暴露在外部的事件;例如,如果鼠标在我的控制上,而我想做出反应对此。我可以在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属性名为x:name =“ LeftTraingularIndicator”]的ControlTemplate

问题:

现在,我想在我的XAML中对IsMouseDown做出反应。我怎么做?没有“ IsMouseDown”触发器。此外,如果我要怎么办在后面的代码中对此做出反应?更进一步,如果我想要更改后面的代码中的LeftTraingularIndicator“ Fill”?

  1. 与属于视觉元素的子元素有关的事件我的ControlTemplate的构造,例如,如果我想做出反应怎么办到XAML中的“ LeftTraigularIndicator”的“ IsMouseOver”,甚至在背后的代码中?甚至两者都可以。
  2. 我现在尝试了2天...感觉我在了解事物的运作方式时缺少了一些东西。找不到任何可以深入解释这些问题的教程。

我想看看我在这里浮出水面的每个问题的几行示例。

谢谢。

我想建立一个新的自定义控件。我发现很少有教程为我提供了一些实现方法的线索。据我了解,创建新的自定义控件总是通过扩展当前控件来完成的,...

c# .net wpf wpf-controls custom-controls
2个回答
10
投票

经过广泛研究...


7
投票

如果我正确理解了您的问题,以下是我的解释。

© www.soinside.com 2019 - 2024. All rights reserved.