我試圖將事件鏈接到駐留在項目控件中的單選按鈕。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事件仍然應該稍後在我的項目控件中單擊時註冊。 radioButtonsItemsControlMouseLeftButtonDown:
void radioButtonsItemsControlMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
RadioButton radioButton = e.OriginalSource as RadioButton;
if (radioButton != null) radioButton.Checked += OnChecked;
}
,當我在我的ItemsControl雖然點擊這個永遠不會觸發。
不知道我正在討論這個正確的方法,所以我打開其他方法將事件附加到ItemsControls中的項目。
謝謝, 邁克