2011-08-09 14 views
9

Nacisk wskazówkę wizualną, która zapewnia WPF na Windows 7 jest linia przerywana, takie jak ten: FocusExampleJak mogę zmienić sposób, w jaki fokus wygląda w WPF?

Teraz, w jaki sposób mogę zmienić sposób to wygląda? Jak mogę kontrolować jego wygląd?

Dzięki!

+0

Dziedzicz sterowanie za pomocą ich. Po wybraniu przycisku przerysuj przycisk w jaki sposób ma wyglądać. –

Odpowiedz

22

spróbować czegoś jak po

<Window x:Class="FocusVisualStyle.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <Style x:Key="MyFocusVisualStyle"> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Rectangle Margin="-2" StrokeThickness="1" Stroke="Red"/> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<StackPanel Orientation="Horizontal" Height="24"> 
    <TextBox Width="96"/> 
    <Button Content="Yes" Width="64" FocusVisualStyle="{DynamicResource MyFocusVisualStyle}"/> 
    <Button Content="No" Width="64" FocusVisualStyle="{DynamicResource MyFocusVisualStyle}"/> 
</StackPanel> 

można dostosować do własnych sympatii. To tylko punkt wyjścia.

Edit: Ponieważ tak wiele osób się podobało to rozwiązanie tutaj jest kolejnym przykładem, który zmienia ostrości styl wizualny dla wszystkich przycisków i pól tekstowych bez wyraźnej ustawieniem własności FocusVisualStyle dla każdej kontroli (patrz że DynamicResource thingy?) W XAML

Używa również animacji do zmiany koloru prostokąta skupienia.

Enjoy :)

<Window x:Class="FocusVisualStyle.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <Style x:Key="MyFocusVisualStyle"> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate > 
        <Rectangle Margin="-2" StrokeThickness="2" RadiusX="2" RadiusY="2" > 
         <Rectangle.Stroke> 
          <SolidColorBrush Color="Red" x:Name="RectangleStroke" /> 
         </Rectangle.Stroke> 
         <Rectangle.Triggers> 
          <EventTrigger RoutedEvent="Rectangle.Loaded" > 
           <BeginStoryboard> 
            <Storyboard> 
             <ColorAnimation From="Red" 
                 To="Orange" 
                 Duration="0:0:0.5" 
                 RepeatBehavior="Forever" 
                 Storyboard.TargetName="RectangleStroke" 
                 Storyboard.TargetProperty="Color"/> 
             <DoubleAnimation To="3" 
                 Duration="0:0:0.5" 
                 RepeatBehavior="Forever" 
                 Storyboard.TargetProperty="StrokeDashOffset" /> 
            </Storyboard> 
           </BeginStoryboard> 
          </EventTrigger> 
         </Rectangle.Triggers> 
        </Rectangle> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style TargetType="{x:Type Button}"> 
     <Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisualStyle}" /> 
    </Style> 
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisualStyle}" /> 
    </Style> 
</Window.Resources> 
<StackPanel Orientation="Horizontal" Height="24"> 
    <TextBox Width="96"/> 
    <Button Content="Yes" Width="64" /> 
    <Button Content="No" Width="64" /> 
</StackPanel> 

Tutaj widać, że mam style Button i TextBox które ustalają FocusVisualStyle właściwości dla wszystkich przycisków i pól tekstowych w tym oknie.

+0

Twój styl jest wyzwalany tylko na ognisku klawiatury, ale nie na ognisku myszy – WPFKK

+0

Sprawdzę to, minęło sporo czasu odkąd je opublikowałem. Wróci tak szybko, jak będę mógł. –

+0

@ user841612, ponieważ 'FocusVisualStyle' jest używany tylko wtedy, gdy fokus uzyskuje się za pomocą klawiatury, nie programowo lub za pomocą myszy. – jnovo

Powiązane problemy