我有ControlTemplate
一个自定义控件,它看起来像这样(简化):
<ControlTemplate TargetType="CustomControl">
<Grid>
<Grid.Resources>
<DataTemplate TargetType="CustomClassA">
<TextBlock Text={Binding ClassASpecificProperty}" />
</DataTemplate>
<DataTemplate TargetType="CustomClassB">
<TextBlock Text={Binding ClassBSpecificProperty}" />
</DataTemplate>
</Grid.Resources>
<ContentControl Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
这样做的美妙之处在于,特定的Content
,取决于其类型(A 或 B),以不同的方式显示,由DataTemplate
为每种类型定义的 s 引起。
然而。有时不只是TextBlock
s。想象一下这些数据模板中有按钮。有时您想Click
使用某些方法订阅事件。但是这些控件模板通常在 . 中ResourceDictionary
,因此没有代码用于放置相应Click
处理程序的方法。
我看到了三种不同的解决方案:
- 创建带有附加文件代码的 CustomResourceDictionary
- 覆盖
OnApplyTemplate
方法(不过我不太明白)并以编程方式订阅事件 - 在“ViewModel”中处理附加消息并处理 UI 逻辑。丑陋的!
实现这一目标的最佳实践是什么?还是有什至“更好”的解决方案?那么性能呢?