Я пытаюсь создать проверяемый вариант элемента управления ComboBox
, используя пользовательский ControlTemplate
. Конечная цель - добавить обработчик щелчка для интегрированного CheckBox
каждый раз, когда создается новый ComboBoxItem
, но когда я использую (CheckBox)template.FindName("myCheckBox", item);
, он всегда возвращает ноль.
Вот стиль, который устанавливает ControlTemplate
:
<Style x:Key="CheckedComboBoxStyle" TargetType="{x:Type ComboBox}">
<Setter Property="Margin" Value="8"></Setter>
<Setter Property="Background" Value="Transparent"></Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Margin" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<StackPanel x:Name="myStackPanel" Orientation="Horizontal">
<CheckBox x:Name="myCheckBox" Focusable="False" Width="50" Foreground="{StaticResource textBrush}"
IsChecked="{Binding Path=IsChecked, Mode=TwoWay,
RelativeSource={RelativeSource TemplatedParent}}">
<ContentPresenter></ContentPresenter>
</CheckBox>
<TextBlock x:Name="myTextBlock" Text="{Binding Name}" Width="100" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
, и вот код, который пытается получить ссылку на CheckBox в коде при каждом добавлении нового элемента в ComboBox
:
ComboBoxItem item = new ComboBoxItem();
item.Content = system.Name;
item.Tag = system.Id;
cbSystems.Items.Add(item);
item.Loaded += (sender, e) =>
{
var template = item.Template;
CheckBox chkBox = (CheckBox)template.FindName("myCheckBox", item);
MessageBox.Show(chkBox.Name);
};