1

WPF でリスト ビューを使用しています。マウス オーバーのハイライト色を削除したいので、このコードを実装しています。

 <Trigger Property="IsMouseOver" Value="True">
       <Setter Property="Background" Value="Transparent" />
 </Trigger>

ハイライトの色を削除していますが、完全ではありませんが、リスト ビュー アイテムの上に小さな灰色の長方形のボックスがあります。このハイライトを完全に削除するにはどうすればよいですか?

以下、画像も添付します。

http://i.stack.imgur.com/8uvsi.png

4

3 に答える 3

4

Altamash、私の理解では、白い線がある理由は、wpf がその配色を含むデフォルトの Windows Aero テーマを使用しているためです。それを変更するために、ListViewItem の独自のコントロールを作成できます。

デフォルトの色

配色変更後

<ListView.ItemContainerStyle>
     <Style TargetType="{x:Type ListViewItem}">
           <Style.Resources>
                <SolidColorBrush x:Key="ListItemHoverFill" Color="LightBlue"/>
           </Style.Resources>
           <Setter Property="Template">
                <Setter.Value>
                     <ControlTemplate TargetType="{x:Type ListViewItem}">
                          <Border CornerRadius="0" SnapsToDevicePixels="True"  
                              BorderThickness="0,-1,0,1"   
                              BorderBrush="#dcdbd5"   
                              Background="{TemplateBinding Background}">
                                  <Border Name="InnerBorder" CornerRadius="0" BorderThickness="0">
                                      <Grid>
                                          <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="Transparent" />
                                          <GridViewRowPresenter Grid.RowSpan="0"   
                                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"   
                                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                      </Grid>
                                  </Border>
                             </Border>
                       <ControlTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="True">
                           <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" />
                           <Setter Property="BorderBrush" Value="Transparent" />
                           <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
                       </Trigger>

                   </ControlTemplate.Triggers>
               </ControlTemplate>
           </Setter.Value>
        </Setter>
     </Style>
</ListView.ItemContainerStyle>

お役に立てれば ;)

于 2013-09-05T06:29:45.750 に答える
0

私の解決策は、古典的なテーマを設定することでした:

        public static void SetTheme(string themeName, string themeColor)
    {
        const BindingFlags staticNonPublic = BindingFlags.Static | BindingFlags.NonPublic;

        var presentationFrameworkAsm = Assembly.GetAssembly(typeof(Window));

        var themeWrapper = presentationFrameworkAsm.GetType("MS.Win32.UxThemeWrapper");

        var isActiveField = themeWrapper.GetField("_isActive", staticNonPublic);
        var themeColorField = themeWrapper.GetField("_themeColor", staticNonPublic);
        var themeNameField = themeWrapper.GetField("_themeName", staticNonPublic);

        // Set this to true so WPF doesn't default to classic.
        isActiveField.SetValue(null, true);

        themeColorField.SetValue(null, themeColor);
        themeNameField.SetValue(null, themeName);
    }

    static App()
    {
        try
        {
            SetTheme("Classic", "NormalColor");

ソース: http: //northhorizo​​n.net/2010/how-to-actually-change-the-system-theme-in-wpf/

于 2015-04-15T11:54:39.690 に答える