对于绑定到一个不需要或不支持排序的简单列表的WPF ListView,你如何做到这一点,以便用户点击标题时没有按下按钮反馈?默认情况下,单击列标题的中间感觉就像按下按钮,没有任何反应。
我想要实现的外观和感觉的一个例子是在系统控制面板>高级系统设置>用户档案设置。配置文件列表不支持排序。因此,单击时标题不响应(列调整大小点击除外)。
答案 0 :(得分:5)
您可以通过在不希望可点击的列标题上将“IsEnabled”设置为false来完成此操作。我粘贴了一个我用作测试的例子。我做的唯一另一件事是更改前景画笔,以便禁用的列标题与其他标题一样显示为黑色。
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Width="120">
<GridViewColumnHeader IsEnabled="True" Content="Col A" Foreground="Black"/>
</GridViewColumn>
<GridViewColumn Width="120">
<GridViewColumnHeader IsEnabled="False" Content="Col B" Foreground="Black"/>
</GridViewColumn>
</GridView>
</ListView.View>
<ListViewItem>1</ListViewItem>
<ListViewItem>4</ListViewItem>
<ListViewItem>2</ListViewItem>
<ListViewItem>3</ListViewItem>
</ListView>
第一列是可点击的,第二列则不是。希望这有帮助!
编辑:我的评论中引用的示例。此方法会启用标头,但仍然不允许单击它:
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Width="120">
<GridViewColumnHeader Content="Col A"/>
</GridViewColumn>
<GridViewColumn Width="120">
<GridViewColumnHeader Content="Col B" PreviewMouseDown="GridViewColumnHeader_PreviewMouseDown"/>
</GridViewColumn>
</GridView>
</ListView.View>
<ListViewItem>1</ListViewItem>
<ListViewItem>4</ListViewItem>
<ListViewItem>2</ListViewItem>
<ListViewItem>3</ListViewItem>
该事件的代码隐藏:
private void GridViewColumnHeader_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
这基本上“吃掉”对此按钮所做的任何点击。不幸的是,它还会阻止您调整大小,因为您需要单击以调整大小。可能有一种方法可以测试点击是否是“按钮”点击或“调整大小区域”点击,只处理按钮点击,但我不确定。
答案 1 :(得分:1)
如果要禁用所有ListView的标题按钮,请在Application.Resources下的Application.xaml文件中创建样式。执行此操作时,标题将不会很大。
<Application>
...
<Application.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" >
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
<Border BorderBrush="LightGray" BorderThickness="1,0,1,0">
<TextBlock Text="{TemplateBinding Content}" TextAlignment="Center"
Background="LightSteelBlue" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
...从 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/02212923-85bc-4a20-a41c-c1b558fce8c1/