使用GridView时无法在ListView中设置所选样式的样式 [英] Can't style selected item in ListView when GridView is used

查看:73
本文介绍了使用GridView时无法在ListView中设置所选样式的样式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是一个包含ListView的简单窗口.请注意,它会覆盖SystemColors.HighlightBrushKey来更改所选项目的颜色.
正常工作,除非 

完成此操作后,GridView似乎对所选行的外观实施了自己的想法.

如何使用GridView为ListView的选定行设置样式?


< Window x:Class ="WpfApplication1.Window3"
    xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
   标题="Window3".高度="300".宽度="300">

    < Grid>
       < ListView>
          < ListView.ItemContainerStyle>
              < Style>
            &bb <样式资源    < SolidColorBrush x:Key ="{x:Static SystemColors.HighlightBrushKey}"颜色=橙色" />
               </Style.Resources>
               </Style>
          </ListView.ItemContainerStyle>
            < ListView.Items>
              < ListViewItem> a</ListViewItem>
             < ListViewItem> b</ListViewItem>
            &b < ListViewItem> c</ListViewItem>
           </ListView.Items>
          
           <!-< ListView.View>
              < GridView>
              < GridViewColumn DisplayMemberBinding =" {Binding}"标头=列A"/>
               </GridView>
           </ListView.View>->
           
       </ListView>
    </Grid>
</Window>


罗杰·雷诺兹

Below is a simple window that contains a ListView. Note that it is overriding the SystemColors.HighlightBrushKey to change the color of the selected item.
Works fine, unless  the ListView.View block is enabled, and a GridView is defined.

When that is done, the GridView seems to enforce its own idea of what the selected row should look like.

How can I style the selected row of a ListView using a GridView?


<Window x:Class="WpfApplication1.Window3"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window3" Height="300" Width="300">

    <Grid>
        <ListView>
            <ListView.ItemContainerStyle>
                <Style>
                    <Style.Resources>
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Orange" />
                    </Style.Resources>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.Items>
                <ListViewItem>a</ListViewItem>
                <ListViewItem>b</ListViewItem>
                <ListViewItem>c</ListViewItem>
            </ListView.Items>
           
            <!--<ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding}" Header="Column A"/>
                </GridView>
            </ListView.View>-->
           
        </ListView>
    </Grid>
</Window>


roger reynolds

推荐答案

尝试更改SystemColors.父面板资源中的HighlightBrushKey颜色,如下所示.

标记:
< Window x:Class ="ListViewSelectedItem.Window1"
    xmlns =" http://schemas.microsoft.com/winfx/2006/xaml/presentation " ;
    xmlns:x =" http://schemas.microsoft.com/winfx/2006/xaml "
   标题="Window1".高度="300".宽度="300">
< StackPanel>
       < StackPanel.Resources>
                          < SolidColorBrush x:Key ="{x:Static SystemColors.HighlightBrushKey}"颜色=橙色"/
                       </StackPanel.Resources>
       < ListView>
          < ListViewItem Content ="Item1"/>
< ListViewItem Content ="Item2"/>
< ListViewItem Content ="Item3"/>
       </ListView>
       < ListView ItemsSource ="{Binding}">
            < ListView.View>
               < GridView>
            &b < GridViewColumn Header ="Item" DisplayMemberBinding ="{绑定内容}"/>
              </GridView>
          </ListView.View>
       </ListView>
    </StackPanel>
</Window>

代码:
使用System.Collections.Generic;
使用System.Windows;

Try changing the SystemColors.HighlightBrushKey Color in parent panel resources as example below. It works on my VS2008 sp1 on win7.

Markup:
<Window x:Class="ListViewSelectedItem.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <StackPanel.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Orange"/>
        </StackPanel.Resources>
        <ListView>
            <ListViewItem Content="Item1"/>
            <ListViewItem Content="Item2"/>
            <ListViewItem Content="Item3"/>
        </ListView>
        <ListView ItemsSource="{Binding}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Item" DisplayMemberBinding="{Binding Content}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </StackPanel>
</Window>

Code:
using System.Collections.Generic;
using System.Windows;

命名空间ListViewSelectedItem
{
   公共局部类Window1:Window
{
      公共Window1()
       {
                       InitializeComponent();
          DataContext =新列表< Item>
           {
               新商品{Content ="Item_A"},
              新商品{Content ="Item_B"},
              新商品{Content ="Item_C"},
           };
       }
    }
   公共类Item
    {
      公共字符串Content {set;得到; }
    }
}

namespace ListViewSelectedItem
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            DataContext = new List<Item>
            {
                new Item{Content = "Item_A"},
                new Item{Content = "Item_B"},
                new Item{Content = "Item_C"},
            };
        }
    }
    public class Item
    {
        public string Content { set; get; }
    }
}


这篇关于使用GridView时无法在ListView中设置所选样式的样式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆