是否有可能在WPF资源字典背后设置代码以进行事件处理?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

是否有可能在WPF的资源字典背后设置代码?如,在一个用户控件中用XAML声明它的按钮。按钮单击的事件处理代码在控件后面的代码文件中完成。如果我要用按钮创建数据模板,那么我怎样才能在资源字典中为它的按钮点击编写事件处理程序代码?

提问于
用户回答回答于

我认为你要求的是一个ResourceDictionary的code-behind文件。

假设你有一个名为MyResourceDictionary的ResourceDictionary。在MyResourceDictionary.xaml文件中,将x:Class属性放在根元素中,如下所示:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    x:Class="MyCompany.MyProject.MyResourceDictionary"
                    x:ClassModifier="public">

然后,使用以下声明在文件后面创建一个名为MyResourceDictionary.xaml.cs的代码:

namespace MyCompany.MyProject
{
    partial class MyResourceDictionary : ResourceDictionary
    { 
       public MyResourceDictionary()
       {
          InitializeComponent();
       }     
       ... // event handlers ahead..
    }
}

完成了。

用户回答回答于

从code-behind中,可以使用以下命令访问ax:Name元素:

Button myButton = this.GetTemplateChild("ButtonName") as Button;
if(myButton != null){
   ...
}

如果想在自定义控件加载时连接到控件,可以在OnApplyTemplate方法中执行此操作。OnApplyTemplate需要被覆盖来执行此操作。这是一种常见的做法,并允许风格与控件保持断开。

扫码关注云+社区