我的ResourceDictionary
包含DataTemplate
:
<DataTemplate x:Key="CellTemplateCheckBox">
<Border BorderBrush="#55000000" BorderThickness="1,0,0,1" x:Name="borderCheckBox">
<Grid>
<CheckBox x:Name="chkModeled" IsChecked="{Binding Path=modeled}" Margin="2" />
</Grid>
</Border>
</DataTemplate>
在运行时,我加载了DataTemplate
,所以我可以将它传递给另一个程序集:
var res = (DataTemplate)FindResource("CellTemplateCheckBox");
otherAssembly.SetTemplate(res);
问题是:
如何以编程方式将Checked
事件附加到Checkbox
中包含的DataTemplate
中包含的ResourceDictionary
?
答案 0 :(得分:2)
修改或创建模板并添加元素和事件确实不是一项简单的任务。
您可以尝试从我几年前撰写的这篇文章中找到一些帮助,该文章使用关闭按钮创建一个TabItem,从而创建可以由其他控件或Windows使用模板管理的Close事件。它比您的示例稍微复杂一点,但您可以专注于解释事件创建的部分。它不仅需要XAML,还需要一个类。我希望这可以帮到你
答案 1 :(得分:1)
如何以编程方式将Checked事件附加到包含的复选框
为什么代码绑定到modeled
属性?
只需通过来自modeled
的设置者的调用进行必要的处理。如果从那里处理,它可以识别它的来源以及支票的状态。
答案 2 :(得分:0)
我确实找到了一个简单的答案,至少。在包含Checkbox
的对象中,捕获冒泡的事件:
<Grid CheckBox.Checked="chkBox_Checked">
在chkBox_Checked
处理程序中,您可以在e.OriginalSource.Name
中测试e.OriginalSource
(必须测试FrameworkElement
是否为RoutedEventArgs
)以查看它是否与"chkModeled"
匹配1}}。如果是这样,您知道Checked
事件来自DataTemplate的Checkbox
。