我对CheckBox有疑问。当用户点击CheckBox的内容时,我不希望CheckBox触发已检查的事件。我知道我可以在ContentPresenter中设置IsHitTestVisible = False。
目前我无法用cb.IsChecked初始化我的CheckBox。关于这个的任何想法?或者有任何不同的想法?
提前致谢。
CU soltyr
我的XAML代码:
<Style x:Key="CheckBoxStyle" x:Name="myCheckBoxStyle" TargetType="{x:Type CheckBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="16" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" Click="cb_Click">
</CheckBox>
<ContentPresenter Grid.Column="1"
Margin="5,0,0,0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
IsHitTestVisible="False" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我的C#代码
for (int i = 0; i < tcList.Count; i++)
{
lbi = new ListBoxItem();
tc = (TableContent)tcList[i];
cb = new CheckBox();
cb.Style = (Style)FindResource("CheckBoxStyle");
cb.Content = tc.test1;
cb.IsChecked = tc.test2;
lbi.Margin = new Thickness(0, 4, 0, 0);
lbi.Content = cb;
lbi.Selected += new RoutedEventHandler(lbi_Selected);
lbi.KeyDown += new KeyEventHandler(lbi_KeyUp);
lbi.KeyUp += new KeyEventHandler(lbi_KeyUp);
lbTaster.Items.Add(lbi);
ht.Add(i, tc.On_Off);
}
答案 0 :(得分:0)
您创建了一个CheckBox,其模板包含第二个CheckBox。您在外部设置IsChecked,但这不会影响内部的。最简单的解决方法是将内部文本框上的IsChecked属性绑定到外部文本框上的IsChecked属性:
<CheckBox Grid.Column="0" Click="cb_Click" IsChecked="{Binding IsChecked,
RelativeSource={RelativeSource TemplatedParent}}">
</CheckBox>