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

时间:2015-09-15 15:53:20

标签: c# wpf datatemplate

我的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

3 个答案:

答案 0 :(得分:2)

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

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

The Article on templating

答案 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