3

我有一个自定义控件,它有一个名为 ViewModel 的依赖属性,其值显示在ContentPresenter. 我DataTemplate对每种类型的 ViewModel 都有一个。每个模板都允许用户以不同的方式进行选择,我需要在后面的自定义控件代码中处理该选择事件。

<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);
    }
}
4

1 回答 1

1

这些 DataTemplate 是否在资源字典中定义?

如果是这样,您可以使用附加的行为

如果它们是在 MyWindow 或 MyUserControl XAML 中定义的,那么您可以在后面的代码中定义它们 ieMyWindow.xaml.csMyUserControl.xaml.cs

于 2013-01-15T12:23:54.373 回答