FocuVisualStyle的样式未应用

时间:2015-11-03 15:20:55

标签: wpf xaml checkbox

在我的应用程序中,我希望CheckBox如果得到的话,键盘焦点不应该有虚线边框。我已将FocusVisualStyle设置为null。 CheckBox的定义如下:

<CheckBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,5,0,10" Style="{StaticResource MyCheckBoxStyle}"
          IsChecked="{Binding UseOriginalPath, UpdateSourceTrigger=PropertyChanged}" FocusVisualStyle="{x:Null}" >
    <TextBlock TextWrapping="Wrap" Text="Use the original path"/>
</CheckBox>

CheckBox的自定义样式如下:

<Style TargetType="CheckBox" x:Key="MyCheckBoxStyle">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid Margin="2.5">
                    <Border BorderThickness="0" BorderBrush="Green" Margin="-25,-2.5,-6,-2.5" x:Name="border"/>
                    <ContentPresenter Content="{TemplateBinding Content}"/>
                </Grid>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=CheckBox}, Path=IsFocused}" Value="True">
                        <Setter TargetName="border" Property="BorderThickness" Value="1.5"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

直到这里一切都按预期工作。如果我使用Tab键将CheckBox聚焦在其周围没有虚线边框。

但是,如果我从FocusVisualStyle="{x:Null}"定义中移除CheckBox并想将其移至syle,则无法使用。

所以CheckBox的定义现在看起来像是:

<CheckBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,5,0,10" Style="{StaticResource MyCheckBoxStyle}"
          IsChecked="{Binding UseOriginalPath, UpdateSourceTrigger=PropertyChanged}">
    <TextBlock TextWrapping="Wrap" Text="Use the original path"/>
</CheckBox>

风格看起来像:

<Style TargetType="CheckBox" x:Key="MyCheckBoxStyle">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Grid Margin="2.5">
                    <Border BorderThickness="0" BorderBrush="#79B100" Margin="-25,-2.5,-6,-2.5" x:Name="border"/>
                    <ContentPresenter Content="{TemplateBinding Content}"/>
                </Grid>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=CheckBox}, Path=IsFocused}" Value="True">
                        <Setter TargetName="border" Property="BorderThickness" Value="1.5"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
</Style>

现在,如果我将CheckBox与Tab-Key对焦,则会出现dottet边框。我不明白我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

使用FocusVisualStyle属性为您的控件创建单独的视觉样式,这就是您无法从控件样式设置器中使用它的原因。 这个Link有详细的答案。