使用GridView时无法在ListView中设置所选样式的样式 [英] Can't style selected item in ListView when GridView is used
问题描述
下面是一个包含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屋!