在资源字典中包含的 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。希望对您有所帮助
至少我确实找到了一个简单的答案。在包含 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 的调用进行必要的处理。如果从那里处理,它可以识别它来自谁以及支票的状态。
我有一个 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。希望对您有所帮助
至少我确实找到了一个简单的答案。在包含 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 的调用进行必要的处理。如果从那里处理,它可以识别它来自谁以及支票的状态。