Я пытаюсь связать события с моими переключателями, которые находятся в элементе управления itemscontrol.Silverlight: привязка событий к элементам в ItemsControl
Мой шаблон ниже:
<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;
}
это никогда не срабатывает, когда я нажимаю в моем ItemsControl, хотя: radioButtonsItemsControlMouseLeftButtonDown.
Не уверен, что я собираюсь сделать это правильно, поэтому я открыт для альтернативных методов прикрепления событий к элементам внутри ItemsControls.
Спасибо, Майк