MouseOverハイライトスタイルが1秒後にデフォルトに戻る(Aeroが原因?)

StackOverflow https://stackoverflow.com/questions/250622

質問

UIの残りの部分と一致するようにComboBoxをスタイルしようとしていますが、IsMouseOverの強調表示に問題があります。指定した色で1秒間強調表示された後、デフォルトの色にフェードバックします。これはクールな効果ですが、私が意図したものではありません。私のスタイルは次のとおりです。

<Style TargetType="ComboBox">
    <Style.Triggers>
        <Trigger Property="ComboBox.IsMouseOver" Value="True">
            <Setter Property = "Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

背景色を維持するにはどうすればよいですか

役に立ちましたか?

解決

実際の問題は、ComboBoxのデフォルトテンプレートが原因です。 Reflector を使用してPresentationFramework.Aeroアセンブリを開くと、 ButtonChromeクラス。赤の背景を隠しているOnRenderMouseOverChangedというメソッドがあります。

それは多くの作業ですが、少なくともComboBoxの場合は、おそらくComboBoxのデフォルトテンプレートをオーバーライドする必要があります。 ショーミーテンプレートまたはブレンド

同じスタイルを使用してテンプレートをオーバーライドできます。

<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBox}">
                <!-- Template Here -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

他のヒント

WPF Visual Studio Designerからデフォルトのテンプレートのコピーを取得し、ComboBoxReadonlyToggleButtonスタイルでButtonChromeセクションをコメントアウトしてBorderに置き換えることにより、この動作をオーバーライドできます。ここに私が解決策を見つけたサイトへのリンクがあります- http://www.scriptscoop.net/t/d346cf01d844/cc-wpf-combobox-mouse-over-color.html

ここに私のコードスニペットがあります

<Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}">
  <Setter Property="OverridesDefaultStyle" Value="true"/>
  <Setter Property="IsTabStop" Value="false"/>
  <Setter Property="Focusable" Value="false"/>
  <Setter Property="ClickMode" Value="Press"/>
  <Setter Property="Background" Value="Transparent"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ToggleButton}">
        <!-- Replace the ButtonChrome - this eliminated the following
             problem:  When the mouse was moved over the ComboBox
             the color would change to the color defined in ___ but 
             then would  
             immediately change to the default Aero blue
             gradient background of 2 powder blue colors  - 
             Had to comment out the          
             below code and replace it as shown
             <Themes:ButtonChrome x:Name="Chrome" BorderBrush="                 {TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" SnapsToDevicePixels="true">
               <Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
                 <Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/>
               </Grid>
             </Themes:ButtonChrome>-->

         <!-- Here is the code to replace the ButtonChrome code -->
         <Border x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
           <Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
             <Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/>
           </Grid>
         </Border>
       <!-- End of code to replace the Button Chrome -->

また、背景色をDarkOrangeに変更するコードを追加しました- このコードは、ComboBoxのスタイルのControlTemplate(セクション内)に入りました。

<!-- Hover Code - Code that was added to change the ComboBox background 
     color when the use hovers over it with the mouse -->
<Trigger Property="IsMouseOver" Value="True">
   <Setter Property="Background" Value="DarkOrange"></Setter>
</Trigger>
<!-- Hover Code - End -->
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top