2011-08-09 5 views
9

WPFは、このような、破線はWindows 7で提供して焦点の視覚ヒント: 今FocusExampleどのようにフォーカスがWPFのように見えるかを変更できますか?

、どのように私はそれを見る方法を変更できますか?どのように私はその外観を制御できますか?

ありがとうございます!

+0

コントロールを継承するには、コントロールを使用します。ボタンが選択されたら、ボタンをどのように表示するかを再描画します。 –

答えて

22

は、あなたがあなたの好みに合わせてカスタマイズすることができ

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

を、次のようなものを試してみてください。これは単なる出発点に過ぎない。

編集:多くの人々は、このソリューションを気に入っているので、ここでXAMLで(?そのDynamicResourceブツを参照)各コントロールのFocusVisualStyleプロパティを明示的に設定せずにすべてのボタンやテキストボックスのための焦点のビジュアルスタイルを変更し、別の例である

また、アニメーションを使用してフォーカス矩形の色を変更します。

はここ:)

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

をお楽しみください私は、このウィンドウですべてのボタンやテキストボックスのプロパティFocusVisualStyleを設定するボタンやテキストボックスのスタイルを持っていることがわかります。

+0

あなたのスタイルはキーボードフォーカスでのみトリガーされますが、マウスフォーカスではトリガーされません – WPFKK

+0

私はそれをチェックアウトします。できるだけ早く戻ってきます。 –

+0

@ user841612です。これは、プログラム的にもマウスを使用してもフォーカスがキーボードから得られた場合にのみ、「FocusVisualStyle」が使用されるためです。 – jnovo

関連する問題