在资源字典中包含的 DataTemplate 中创建 CheckBox Checked 事件

Create CheckBox Checked event in DataTemplate contained in Resource Dictionary

我有一个 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 事件附加到包含在 ResourceDictionary 中的此 DataTemplate 中包含的 Checkbox

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

您可以尝试从我几年前写的这篇文章中找到一些帮助,这篇文章创建了一个带有关闭按钮的 TabItem 并因此创建了可以由其他控件管理的关闭事件或 Windows 使用模板。它比你的例子稍微复杂一点,但你可以专注于解释事件创建的部分。它不仅需要XAML,还需要一个class。希望对您有所帮助

The Article on templating

至少我确实找到了一个简单的答案。在包含 Checkbox 的对象中,捕获冒泡事件: <Grid CheckBox.Checked="chkBox_Checked">chkBox_Checked 处理程序中,您可以在 RoutedEventArgs 中测试 e.OriginalSource.Name(必须测试 e.OriginalSource 是否是 FrameworkElement)以查看它是否匹配 "chkModeled"。如果是这样,您就知道 Checked 事件来自 DataTemplate 的 Checkbox

How do I programmatically attach a Checked event to the contained Checkbox

当代码绑定到 modeled 属性 时,为什么要这样做?

只需对来自 modeled 的 setter 的调用进行必要的处理。如果从那里处理,它可以识别它来自谁以及支票的状态。