创建复选框资源字典中DataTemplate中的复选事件
本文关键字:事件 DataTemplate 资源 字典 创建 复选框 | 更新日期: 2023-09-27 18:12:47
我有一个包含DataTemplate
的ResourceDictionary
:
<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
事件附加到包含在ResourceDictionary
中包含的DataTemplate
中的Checkbox
?
修改或创建模板并添加元素和事件确实不是一件简单的任务。
您可以尝试从我几年前写的一篇文章中找到一些帮助,该文章创建了一个带有关闭按钮的TabItem,从而创建了可以由其他控件或使用模板的Windows管理的关闭事件。它比您的示例稍微复杂一些,但是您可以将注意力集中在解释事件创建的部分。它不仅需要XAML,还需要一个类。我希望这对你有帮助。
关于模板的文章
如何以编程方式将Checked事件附加到包含的Checkbox
当代码绑定到modeled
属性时为什么要这样做?
简单地从modeled
的setter调用中执行必要的处理。如果从那里处理,它可以识别它来自谁以及检查的状态。
我至少找到了一个简单的答案。在包含Checkbox
的对象中,捕获冒泡事件:<Grid CheckBox.Checked="chkBox_Checked">
在chkBox_Checked
处理程序中,您可以在RoutedEventArgs
中测试e.OriginalSource.Name
(必须测试e.OriginalSource
是否为FrameworkElement
),以查看它是否与"chkModeled"
匹配。如果是这样,您就知道Checked
事件来自于DataTemplate的Checkbox
。