绑定/引用XAML WPF的方法
我有这个xaml
<ControlTemplate x:Key="TitledWindowControlTemplateKey" x:Name="PART_ControlTemplate" TargetType="{x:Type l:TitledWindow}"
我的c#代码:
namespace My.Windows { public partial class TitledWindow : Window { public void Test() { MessageBox.Show("Test"); } } }
问题是我收到以下错误:
错误1
‘ResourceDictionary’根元素需要ax:Class属性来支持XAML文件中的事件处理程序。 删除MouseEnter事件的事件处理程序,或将ax:Class属性添加到根元素。
那么你可以通过将代码附加到ResourceDictionary来实现 。 实现这一目标的几个简单步骤是:
- 假设ResourceDictionary文件名是
CustomResources.xaml
。 在ResourceDictionary之外的同一目录中添加另一个文件,名称为CustomResources.xaml.cs
。 创建inheritance自ResourceDictionary的partial class CustomResources
。
为MouseEnter声明你的处理程序,后面的代码准备就绪。
using System; using System.Windows; namespace WpfApplication1 { public partial class CustomResources : ResourceDictionary { public void MouseEnter(object sender, EventArgs e) { MessageBox.Show("Test"); } } }
- 现在,在XAML中设置
x:Class
属性并将处理程序设置为MouseEnter
。
XAML:
您需要添加x:class属性并指定资源的位置以及事件处理程序的位置。 请参阅是否可以在WPF中为资源字典设置代码以进行事件处理? 举个例子。
问题是Template
需要知道它应用于什么具有MouseEnter
。 不幸的是,即使将x:Type
应用于模板,xaml编译器还没有足够的function继续下去。
我之前做过类似的事情,让ResourceDictionary
识别出我想要的东西的孔隙,看起来我用一种风格来解决它。 http://winchrome.codeplex.com/SourceControl/latest#WinChrome/UI/VS2012ResourceDictionary.xaml中的完整代码。
但是,您希望通过{StaticResource ...}
将处理程序绑定到objectDataPresenter
上的方法,我不确定您是否可以。 相反,你最好使用普通绑定绑定到DataContext
{Binding Path=...}
,我想你仍然可以通过{StaticResource.. }
提供DataContext
。