2017-11-02 150 views
1

注:私はMahApps.Metroを使用しています。WPFフォーカスの変更TextBox背景色

私が望むのは、アプリケーションのすべてのテキストボックスに影響するグローバルスタイルを作成することです。スタイルはフォーカス(マウス、キーボードなど)に合わせて、フォーカスされたTextBoxの背景を変更する必要があります。

私の問題は、私はまだスタイルやテンプレートを吸う Change the focused border color of a Wpf textbox when it GotFocus()

に似ています。これは彼らが使用したコードです。

<Style 
    BasedOn="{StaticResource {x:Type TextBox}}" 
    TargetType="TextBox"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBox}"> 
       <Border 
        x:Name="border" 
        Background="{TemplateBinding Background}" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        SnapsToDevicePixels="True"> 
        <ScrollViewer 
         x:Name="PART_ContentHost" 
         Focusable="false" 
         HorizontalScrollBarVisibility="Hidden" 
         VerticalScrollBarVisibility="Hidden" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter TargetName="border" Property="Opacity" Value="0.56" /> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter TargetName="border" Property="BorderBrush" Value="#FF7EB4EA" /> 
        </Trigger> 
        <Trigger Property="IsFocused" Value="true"> 
         <Setter TargetName="border" Property="BorderBrush" Value="Yellow" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ボーダーではなく背景を変更するこのようなコントロールテンプレートを作成するにはどうすればよいですか? 私はMetroを使用しているので、ベースTextBoxを拡張する必要があります。そうしないと、事前設定されたすべてが失われます。

上記のテンプレートを使用すると、ポインタが少し上に移動し、その高さも短くなっていることに気付きました。おそらくポインタ設定を上書きしているでしょうか?

答えて

3

実際に、背景を変更するだけであれば、テンプレートを作成する必要はありません。シンプルなスタイルで同じ結果を達成できます。ここで マークアップです:

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource MetroTextBox}"> 
    <Style.Triggers> 
     <Trigger Property="IsFocused" Value="True"> 
      <Setter Property="Background" Value="Blue"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

BasedOn="{StaticResource MetroTextBox}"この部分は我々がMahappsからのTextBoxスタイルを拡張していることを示している(あなたがここで例えば、単にコードを調べて拡張するコントロールのリソース名を見つけることができます彼らのTextBoxスタイル - https://github.com/MahApps/MahApps.Metro/blob/c26b33d114aec64d98afd4f729b28838583d8ed9/src/MahApps.Metro/MahApps.Metro/Styles/Controls.TextBox.xaml#L12)。

希望すると、これが役立ちます。

+0

これは解決策でした。それは私の初期のアイデアでしたが、私はBasedOnで初めて何かを混乱させたと思います。追加情報についてもありがとうございました:) – Desomph

+0

あなたはようこそ。 – babgev

関連する問題