4

我的窗口中有一个 ListView 有许多列。用户不能调整部分或全部列的大小,因为它们已经具有最佳宽度,而意外调整大小只会使情况变得更糟。现在该问题有一些可用的答案,但所有答案都以重新设置控件样式而告终。不幸的是,我最终得到了大量的 XAML 代码页面,这些代码高度特定于平台/主题。当我使用 Blend 创建默认样式的副本时,我得到了许多仅适用于 Win7 Aero 的渐变等,但不适用于 XP 主题或其他任何内容。

因此,替换控件的整个样式不是一种选择。(它几乎从来没有真的是。)

我已经确定了需要隐藏的部分,它被命名为“PART_HeaderGripper”。我以前做过这样的事情,使用代码隐藏中的以下代码从 ProgressBar 中删除运行的发光和其他部分:

var glow = progressBar.Template.FindName("PART_GlowRect", progressBar) as FrameworkElement;
if (glow != null) glow.Visibility = visibility;

但这不适用于 GridViewColumnHeader,因为 Template.FindName 没有找到任何东西(返回 null)。我很确定必须有一种方法可以在运行时修改视觉效果。但我现在无法弄清楚。任何想法?

4

2 回答 2

7

测试:

<GridViewColumnHeader Content="Value" IsHitTestVisible="False"/>
于 2012-09-26T20:34:00.943 回答
1

我在我的一个项目中遇到了同样的问题。我找到了一个解决方案,我认为这不是最好的方法,但至少有效。

我正在使用一些数据绑定和单击事件对项目进行排序,因此将列设置为只读不是一种方法。

这是xml中的代码部分:

<ListView Name="ListWievResults" HorizontalAlignment="Left" Height="526" Margin="10,10,0,0" VerticalAlignment="Top" Width="400" ItemsSource="{Binding Results}" SelectedItem="{Binding SelectedResult}" IsSynchronizedWithCurrentItem="True" SelectionChanged="ListWievResults_SelectionChanged" SelectionMode="Single">
        <ListView.View>
            <GridView AllowsColumnReorder="False">
                <GridView.Columns>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Width="200">
                        <GridViewColumnHeader Content="Parameter" Click="GridViewColumnHeader_Click" PreviewMouseMove="GridViewColumnHeader_PreviewMouseMove"/>
                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=ID}" Width="100">
                        <GridViewColumnHeader Content="SAFE ID" Click="GridViewColumnHeader_Click" PreviewMouseMove="GridViewColumnHeader_PreviewMouseMove"/>
                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Author}" Width="95">
                        <GridViewColumnHeader Content="Author" Click="GridViewColumnHeader_Click" PreviewMouseMove="GridViewColumnHeader_PreviewMouseMove"/>
                    </GridViewColumn>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

以及来自 th xaml.cs 文件的相关部分:

private void GridViewColumnHeader_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
    {
        e.Handled = true;
    }

这不是最漂亮的方式,因为标记仍然存在,表明您可以调整列的大小,但至少它不允许这样做。一个缺点是,如果您想将“PreviewMouseMove”事件用于其他事情,那将不起作用。

我真的希望这会有所帮助。

于 2020-02-04T15:20:48.243 回答