主にコンボボックス、テキストボックス、およびチェックボックスを備えたウィンドウがいくつかあります。1 つをクリックしてフォーカスを得ると、カラフルなボックス (ボスの命令) で輪郭を描く方法が必要です。これらすべてのコントロールの既定のスタイルをオーバーライドするよりも簡単にこれを行う方法はありますか? 私はそれをやったことがないので、それを理解するには私の側で多くのことをいじる必要があります.
1 に答える
異なるフォーカス四角形スタイルを必要とするコントロールにFocusVisualStyleを追加してみてください。
上記リンクより
2 番目のメカニズムは、 FocusVisualStyleプロパティの値として別のスタイルを提供することです。「フォーカス ビジュアル スタイル」は、コントロールまたは他の UI 要素のビジュアル ツリーを置き換えて変更するのではなく、コントロールの上に描画する装飾用の別のビジュアル ツリーを作成します。
あなたのウィンドウのXamlでこのようなもの
<Window.Resources>
<Style x:Key="NewFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border>
<Rectangle Stroke="Red" Margin="2" StrokeThickness="1" StrokeDashArray="1 2" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
または Application.Xaml ファイル。
<Application.Resources>
<Style x:Key="NewFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border>
<Rectangle Stroke="Red" Margin="2" StrokeThickness="1" StrokeDashArray="1 2" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
使用法:
<ComboBox FocusVisualStyle="{StaticResource NewFocusVisual}" Height="23" HorizontalAlignment="Left" Margin="238,102,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="120" />
<CheckBox FocusVisualStyle="{StaticResource NewFocusVisual}" Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="238,71,0,0" Name="CheckBox2" VerticalAlignment="Top" />
<TextBox FocusVisualStyle="{StaticResource NewFocusVisual}" Height="23" HorizontalAlignment="Left" Margin="238,144,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120" />
フォーカス イベントの種類ごとにフォーカス四角形を変更する場合、Microsoft は次のように述べています。
Microsoft から: フォーカス ビジュアル スタイルは、キーボード フォーカスに対してのみ機能します。そのため、フォーカス ビジュアル スタイルは一種のアクセシビリティ機能です。マウス、キーボード、またはプログラムによるものであるかにかかわらず、任意のタイプのフォーカスの UI を変更する必要がある場合は、フォーカスのビジュアル スタイルを使用しないでください。代わりに、一般的なフォーカス プロパティの値から動作するスタイルまたはテンプレートでセッターとトリガーを使用する必要があります。 IsFocused や IsFocusWithin など。
TextBox が他のコントロールをチェックしていない場合に機能するため、これを試してみてください
<Application.Resources>
<Style TargetType="TextBox" >
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Control.BorderBrush" Value="Red" />
<Setter Property="Control.BorderThickness" Value="3" />
</Trigger>
</Style.Triggers>
</Style>
</Application.Resources>