2015-11-03 75 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