在ResourceDictionary中定义的ControlTemplate中如何处理EventHandlers



这个问题更多的是关于沿着MVVM行的整洁编程,而不是"如何操作"问题。为了清楚起见,我想将DataTemplates的所有ControlTemplates都保存在一个单独的ResourceDictionary文件中。因此,在主窗口中,它看起来是这样的,例如:

<DataTemplate DataType="{x:Type localm:MusicSystem}">
    <Control Template="{StaticResource MusicSystemTemplate}"/>
</DataTemplate>

然而,这个类的ControlTemplate包含一个ListBox,它应该对某些事件做出反应——有一些处理程序,如下所示:

<ControlTemplate x:Key="MusicSystemTemplate">
    <StackPanel ... >
        <ListBox x:Name="SystemListBox" ...
                 PreviewMouseMove="SystemListBox_PreviewMouseMove"
                 PreviewMouseDown="SystemListBox_PreviewMouseDown"
                 MouseEnter="SystemListBox_MouseEnter"
                 MouseLeave="SystemListBox_MouseLeave">
            <!-- More ListBox stuff here --> 
        </ListBox>
        <!-- More other stuff here -->
    </StackPanel>
</ControlTemplate>

目前,我将这个模板保留在主窗口的XAML中,并在其代码后面保留处理程序,但这不是我想要的。如果它是一个按钮,我会创建一个命令并以某种方式绑定它。但由于它是一个列表框,我不幸地被剥夺了这种可能性。我不想求助于ResourceDictionary背后的代码,因为这不是它们的用途。有没有一种简洁而不过于冗长的方法来绕过它?或者,在Template中声明处理程序可能有问题?

您可以为此使用附加行为。它们可以是使用Blend的交互程序集附加的行为,也可以只是附加的属性,这些属性在值更改时添加和删除事件处理程序。

概述:WPF介绍中的行为。

相关内容

  • 没有找到相关文章

最新更新