web-dev-qa-db-ja.com

テキストボックスのデフォルトのマウスオーバー/フォーカス効果を削除します

ExpressionBlendで一種のカスタムTextBoxを作成しました。背景と境界線の塗りつぶしをグラデーションに変更し、シャドウ効果を追加しました。

TextBoxにマウスオーバーまたはフォーカスすると、WPFのデフォルトの動作/(スタイル?)が引き継がれ、境界線が変更されることに気付きました。

フォーカスまたはマウスオーバーしたときに、WPFがTextBoxesスタイルを変更するのを防止または停止する方法があるかどうか疑問に思いました。これは可能ですか?

17
mattsven

カスタムスタイルでOverridesDefaultStyleプロパティをtrueに設定しますか?これにより、デフォルト値がデフォルトスタイルから描画されるのを防ぐことができると思います。

もしそうなら、そしてこれが機能していない(またはあなたがあなたのownボーダーを使いたい)、私が考えることができるのはあなたがオーバーライドする必要があるということだけですStyle/ControlTemplateTrigger を使用して、適切なプロパティが変更された場合のデフォルトのスタイル設定メカニズム:

<Style x:Key="Triggers" TargetType="TextBox">
  <Style.Triggers>
    <Trigger Property="IsMouseOver" Value="true">
        <Setter Property = "BorderBrush" Value="{Binding ToYourBorder}"/>
    </Trigger>
  </Style.Triggers>
</Style>
3
Grant Thomas

より簡単な解決策は、texboxの境界線の太さを0に設定してから、texboxを独自の境界線にラップすることです。

<Border BorderBrush="LightGray" BorderThickness="1">
   <TextBox Text="{Binding OutlinePlain, Mode=TwoWay, NotifyOnTargetUpdated=True}"
                         BorderThickness="0"                                
   </TextBox>
</Border>
23
igorGIS

新しいテンプレートを使用する必要があります。

<Style TargetType="{x:Type TextBox}">
  <Setter Property="SnapsToDevicePixels" Value="True"/>
  <Setter Property="OverridesDefaultStyle" Value="True"/>
  <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
  <Setter Property="AllowDrop" Value="true"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type TextBoxBase}">
        <Border 
          Name="Border"
          CornerRadius="2" 
          Padding="2"
          Background="#FFFFFF"
          BorderBrush="#888888"
          BorderThickness="1" >
          <ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsEnabled" Value="False">
            <Setter TargetName="Border" Property="Background" Value="#EEEEEE"/>
            <Setter TargetName="Border" Property="BorderBrush" Value="#EEEEEE"/>
            <Setter Property="Foreground" Value="#888888"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

トリガーを削除しましたIsMouseOver

詳細については、こちらをご覧ください: TextBox Styles and Templates

18
Navid Rahmani