1

ListViewのデフォルト スタイルでは、コントロールの上にマウスを置くと、境界線の色が水色にアニメーション化されます。コントロール テンプレート全体を置き換えずにこれをオフにする方法はありますか?

私はもう試した

<ListView>
    <ListView.Style>
        <Style TargetType="ListView">
            <Setter Property="BorderBrush" Value="Green"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">       
                    <Setter Property="BorderBrush" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.Style>
</ListView>

これにより、緑の境界線が表示されます。マウスを重ねると、水色にフェードする前に一時的に赤くなります。デフォルトのアニメーションが優先されます。

何か単純なものが欠けているのでしょうか、それともテンプレートをオーバーライドする時期でしょうか?

4

1 に答える 1

2

ControlTemplateデフォルトでは、表示さListBoxChromeれる効果を作成する要素を使用するため、をオーバーライドする必要があります。ListBoxChromeプロパティによって決定されるように、マウスが上にあるときに BorderBrush プロパティを無視しRenderMouseOverます。

必要に応じて引き続き使用できます。プロパティListBoxChromeを削除するだけです。RenderMouseOverあなたが使用するものを使用していると仮定するとGridView

xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"

...

<Style x:Key="{x:Static GridView.GridViewStyleKey}"
       TargetType="{x:Type ListView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListView}">
                <theme:ListBoxChrome Name="Bd"
                                     BorderThickness="{TemplateBinding BorderThickness}"
                                     BorderBrush="{TemplateBinding BorderBrush}"
                                     Background="{TemplateBinding Background}"
                                     RenderFocused="{TemplateBinding IsKeyboardFocusWithin}"
                                     SnapsToDevicePixels="true">
                    <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"
                                  Padding="{TemplateBinding Padding}">
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </ScrollViewer>
                </theme:ListBoxChrome>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsGrouping"
                             Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll"
                                Value="false"/>
                    </Trigger>
                    <Trigger Property="IsEnabled"
                             Value="false">
                        <Setter TargetName="Bd"
                                Property="Background"
                                Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

焦点を合わせた外観を削除したい場合は、単に要素に置き換える方がよいでしょListBoxChromeBorder

于 2012-04-19T15:31:47.237 に答える