3

値が内に表示されるViewModelという依存関係プロパティを持つカスタムコントロールがありますContentPresenterDataTemplateViewModelのタイプごとにがあります。各テンプレートを使用すると、ユーザーはさまざまな方法で選択を行うことができ、その選択イベントをカスタムコントロールコードビハインドで処理する必要があります。

<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

これらの DataTemplates はリソース ディクショナリで定義されていますか?

その場合は、付属のビヘイビアーを使用できます。

それらが MyWindow または MyUserControl XAML で定義されている場合は、コード ビハインドMyWindow.xaml.csまたはMyUserControl.xaml.cs

于 2013-01-15T12:23:54.373 に答える