代码之家  ›  专栏  ›  技术社区  ›  Edward Brey

在不可排序的WPF ListView标头中不允许按按钮反馈

  •  3
  • Edward Brey  · 技术社区  · 15 年前

    对于绑定到不需要或不支持排序的简单列表的wpflistview,如何使用户在单击页眉时不会收到按钮按下反馈?默认情况下,单击列标题的中间感觉就像按下按钮一样,不会发生任何事情。

    2 回复  |  直到 15 年前
        1
  •  5
  •   Ben Collier    15 年前

    您可以通过在不希望单击的列标题上将“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;
    }
    

        2
  •  1
  •   Carter Medlin    12 年前

    如果要禁用所有列表视图的标题按钮,请在应用程序.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/