2015-11-03 80 views
0

在我的应用程序中,我想要一个CheckBox如果它的Keyboardfocus不应该有一个虚线边框。 Therfor我已将FocusVisualStyle设置为空。该CheckBox的定义是这样的:FocuVisualStyle风格不适用

<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> 

直到这里的一切只是按预期工作。如果我将CheckBox与Tab-Key对齐,则它周围没有虚线边框。

但是,如果我从CheckBox定义中删除FocusVisualStyle="{x:Null}"并且想将其移动到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键也有在dottet边界。我不明白我在这里做错了什么?

回答

1

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

+0

谢谢。我已经通过编写一个'UserControl'解决了这个问题,该''UserControl'继承自'CheckBox'并将'FocusVisualStyle'设置为null。这对我有用 – Tomtom