创建复选框资源字典中DataTemplate中的复选事件

本文关键字:事件 DataTemplate 资源 字典 创建 复选框 | 更新日期: 2023-09-27 18:12:47

我有一个包含DataTemplateResourceDictionary:

<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 ?

创建复选框资源字典中DataTemplate中的复选事件

修改或创建模板并添加元素和事件确实不是一件简单的任务。

您可以尝试从我几年前写的一篇文章中找到一些帮助,该文章创建了一个带有关闭按钮的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