我有一个自定义控件,它有一个名为ViewModel的依赖项属性,该值显示在ContentPresenter
中。我对每种类型的ViewModel都有一个DataTemplate
。每个模板都允许用户以不同的方式进行选择,我需要在后面的自定义控制代码中处理该选择事件。
<Style TargetType="{x:Type local:MyCustomControl}">
<Style.Resources>
<ResourceDictionary>
<DataTemplate DataType="{x:Type local:ViewModelOne}">
<!-- how to handle this event? -->
<ListBox
MouseDoubleClick="ListBox_MouseDoubleClick"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModelTwo}">
<!-- this ListBox has another style, but event should
be handled the same way -->
<ListBox
MouseDoubleClick="ListBox_MouseDoubleClick"/>
</DataTemplate>
<!-- more templates here -->
</ResourceDictionary>
</Style.Resources>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyCustomControl}">
<ContentPresenter Content="{TemplateBinding ViewModel}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
修改
以下是自定义控件背后的代码,我想在双击ListBox
中的某些内容时调用该方法:
public class MyCustomControl : Control
{
// how to attach ListBox MouseDoubleClick event to this method?
private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DoMagic(((ListBox)sender).SelectedItem);
}
}
答案 0 :(得分:0)
这些DataTemplates是否在资源字典中定义?
如果是,您可以使用attached behaviors。
如果它们是在MyWindow或MyUserControl XAML中定义的,那么您可以将它们定义为背后的代码,即MyWindow.xaml.cs
或MyUserControl.xaml.cs