禁用按钮按下不可排序的WPF ListView标头中的反馈

Edw*_*rey 3 sorting wpf listview header

对于绑定到一个不需要或不支持排序的简单列表的WPF ListView,你如何做到这一点,以便用户在点击标题时不会得到按钮反馈?默认情况下,单击列标题的中间感觉就像按下按钮,没有任何反应.

我正在尝试实现的外观的一个示例是在系统控制面板>高级系统设置>用户配置文件设置中.配置文件列表不支持排序.因此,标题在单击时不响应(列调整大小点击除外).

Ben*_*ier 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>
Run Code Online (Sandbox Code Playgroud)

第一列是可点击的,第二列则不是.希望这可以帮助!

编辑:我的评论中引用的示例.此方法启用标头但仍不允许单击它:

<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>
Run Code Online (Sandbox Code Playgroud)

以及该活动的代码隐藏:

private void GridViewColumnHeader_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

这基本上"吃掉"对此按钮所做的任何点击.不幸的是,它还会阻止您调整大小,因为您需要单击以调整大小.可能有一种方法可以测试点击是否是"按钮"点击或"调整大小区域"点击,只处理按钮点击,但我不确定.