禁用ListView中列的大小调整

时间:2012-09-26 15:45:40

标签: wpf listview resize

我的窗口中有一个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)。我很确定必须有一种方法可以在运行时修改视觉效果。但我现在无法弄明白。有什么想法吗?

2 个答案:

答案 0 :(得分:7)

测试:

<GridViewColumnHeader Content="Value" IsHitTestVisible="False"/>

答案 1 :(得分:0)

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

我正在使用一些databingind和click事件对项目进行排序,因此将列设置为只读不是一种可行的方法。

这是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>

和xaml.cs文件中的相关部分:

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

这不是最漂亮的方法,因为标记仍然会显示可以调整列的大小,但至少不允许这样做。 一个缺点是,如果您想将“ PreviewMouseMove”事件用于其他操作,则将无法正常工作。

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

相关问题