wpf - 禁止在不可排序的 WPF ListView header 中按下按钮反馈

标签 wpf sorting listview header

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

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

最佳答案

您可以通过将您不想点击的列标题上的“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>

第一列可点击,第二列不可点击。希望这对您有所帮助!

编辑:我的评论中引用的示例。此方法使 header 保持启用状态,但仍不允许单击它:

<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;
}

这基本上“吞噬”了在此按钮上所做的任何点击。不幸的是,它也会阻止您调整大小,因为您需要单击才能调整大小。可能有一种方法可以测试点击以查看它是“按钮”点击还是“调整区域大小”点击,并且只处理按钮点击,但我不确定。

关于wpf - 禁止在不可排序的 WPF ListView header 中按下按钮反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2858536/

相关文章:

wpf - 无法在数据触发器中使用标签的自定义属性

wpf - 确保按钮在 ScrollViewer 中获得焦点

python - python中快速排序的实现和交换枢轴值

java - 如何在不破坏原始数组的情况下对数组进行排序?

r - 在不同顺序的字符串中查找字母

listview - ExtJS:如何用列将文本包装在ListView中?

asp.net - 默认为 ListView 中的最后一页

c# - 不能使用 ObservableCollection 中的 PropertyChanged

c# - 在 C# WPF 应用程序中显示数据表

java - 无法从 AsyncTask 填充 ListView