我正在尝试将事件链接到驻留在项目控件中的单选按钮。
我的模板如下:
<ItemsControl x:Name="RadioButtonsItemsControl" Height="auto" Width="auto" ItemsSource="{TemplateBinding MapLayers}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="{TemplateBinding RadioButtonOrientation}" Margin="5"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<RadioButton Content="{Binding ID}" IsChecked="{Binding Visible, Mode=TwoWay}"
IsEnabled = "{Binding IsInScaleRange}"
ToolTipService.ToolTip=""
GroupName="BaseLayer"
Foreground="{TemplateBinding ForeGroundBrush}" FontSize="11">
</RadioButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在自定义控件的 .cs 文件中,我有一个用于 itemscontrol 的模板部分,并附加了事件
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
radioButtonsItemsControl = GetTemplateChild("RadioButtonsItemsControl") as ItemsControl;
if (radioButtonsItemsControl != null) radioButtonsItemsControl.MouseLeftButtonDown += radioButtonsItemsControlMouseLeftButtonDown;
}
radioButtonsItemsControl 不等于 null (并且在此阶段尚未填充单选按钮),但 radioButtonsItemsControlMouseLeftButtonDown 事件仍应在稍后我单击项目控件时注册。
void radioButtonsItemsControlMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
RadioButton radioButton = e.OriginalSource as RadioButton;
if (radioButton != null) radioButton.Checked += OnChecked;
}
当我单击我的项目控件时,这永远不会触发:radioButtonsItemsControlMouseLeftButtonDown。
不确定我是否以正确的方式进行此操作,因此我对将事件附加到 ItemsControls 内的项目的替代方法持开放态度。
谢谢,迈克