取消选中bulletdecorator WPF中的Checkbox

时间:2016-12-19 12:49:25

标签: c# wpf xaml checkbox

寻找一点见解。

我有一个我设置为样式的复选框,因为我需要使实际的框与文本大小和位置匹配。样式代码如下:

Style TargetType="{x:Type CheckBox}" x:Key="recogCheckbox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <StackPanel Orientation="Horizontal">
                    <CheckBox Margin="130,4,0,0"/>
                    <BulletDecorator Name="customBullet" Margin="2,0,0,0" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center">
                    <TextBlock Width="100" TextWrapping="Wrap" HorizontalAlignment="Left" Foreground="White" Margin="5,0,0,0" Text="Recognition Call"/>
                    </BulletDecorator>
                    <ContentPresenter/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>    

复选框的xaml代码为:

<CheckBox FontFamily="Microsoft Sans Serif" FontSize="12" FontWeight="Bold" Height="20" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Margin="717,193,0,0" 
              Name="recognitionCheckBox" Style="{StaticResource recogCheckbox}" VerticalAlignment="Top" Width="384" >
</CheckBox>

我正在尝试在我的应用程序上使用清除按钮,以便取消选中复选框,但是当我引用复选框名称&#39; recognitionCheckBox&#39;通过使用recognitionCheckBox.isChecked = false,它不会取消选中我认为的复选框,因为实际的框位于我无法在后面的C#代码中引用的样式内。

有没有人知道取消选中样式中的复选框的方法。我一直在搜索几个网站,但找不到任何帮助过我的网站。

2 个答案:

答案 0 :(得分:0)

从这里开始:https://msdn.microsoft.com/en-us/library/ms752319(v=vs.85).aspx在Stackpanel

之后在控件模板中添加以下内容
 <ControlTemplate.Triggers>
          <Trigger Property="IsChecked" Value="false">
            <Setter TargetName="CheckMark" Property="Visibility" Value="Collapsed"/>
          </Trigger>
          <Trigger Property="IsChecked" Value="true">
            <Setter TargetName="CheckMark" Property="Visibility" Value="Visible" />

        </ControlTemplate.Triggers>

答案 1 :(得分:0)

使用{TemplateBinding}将ControlTemplate中内部CheckBox的IsChecked属性绑定到CheckBox控件本身的IsChecked属性:

<Style TargetType="{x:Type CheckBox}" x:Key="recogCheckbox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" Margin="130,4,0,0"/>
                    <BulletDecorator Name="customBullet" Margin="2,0,0,0" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center">
                        <TextBlock Width="100" TextWrapping="Wrap" HorizontalAlignment="Left" Foreground="White" Margin="5,0,0,0" Text="Recognition Call"/>
                    </BulletDecorator>
                    <ContentPresenter/>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后它将反映Checkbox控件的IsChecked属性的当前值。