4

我有一个列表视图,我需要修复列表视图的列宽,以便在运行时用户无法拖动列标题并调整其大小.....程序是什么?我已经搜索了所有属性,但没有一个可以帮助我解决这个 pbm .. 这在 gridview 中是可能的,但在 listview 中怎么可能......

4

4 回答 4

16

最简单的方法是使用ColumnWidthChanging事件:

private void listView_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
    e.Cancel = true;
    e.NewWidth = listView.Columns[e.ColumnIndex].Width;
}
于 2010-03-17T07:08:07.070 回答
1

使用ObjectListView。这不仅允许各个列的宽度固定,而且还具有最小和最大宽度。它努力捕捉所有情况,包括 Ctrl-Numpad-+,因此它们无法被规避。

于 2010-03-17T11:43:51.740 回答
0

非常感谢我在 vb.net 中使用它作为

 Private Sub ListView1_ColumnWidthChanging(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnWidthChangingEventArgs) Handles ListView1.ColumnWidthChanging
     e.Cancel = True
     e.NewWidth = ListView1.Columns(e.ColumnIndex).Width    
 End Sub
于 2010-08-01T07:36:16.577 回答
0

实现此目的的一种方法是将 Selector.IsEnabled 设置为 false。

我将在我正在处理的一个应用程序中使用我的代码,它很简单,你会很容易得到它。

ListView 代码(关注 GridView 的 ColumnHeaderContainerStyle 属性) -

<ListView Grid.Row="1" BorderBrush="{StaticResource MainForegroundBrush}" BorderThickness="1" 
                          HorizontalContentAlignment="Center" FontSize="11" Width="auto" Height="auto" 
                          ItemsSource="{Binding CurrentPkgs,UpdateSourceTrigger=PropertyChanged}" 
                          Style="{DynamicResource ListViewStyle1}" ItemContainerStyle="{DynamicResource ListViewItemStyle1}">
                    <ListView.View>

                        <GridView ScrollViewer.VerticalScrollBarVisibility="Visible" AllowsColumnReorder="False" 
                                  ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}">
                            <GridViewColumn Header="ManualId" Width="70" DisplayMemberBinding="{Binding Path=ManualId}" />
                            <GridViewColumn Header="ManualPath" Width="210" DisplayMemberBinding="{Binding Path=ManualPath}" />
                            <GridViewColumn Header="Revision" Width="60" DisplayMemberBinding="{Binding Path=RevVersion}" />
                            <GridViewColumn Header="PublishedOn"  Width="80" DisplayMemberBinding="{Binding Path=PublishedOn}" />
                            <GridViewColumn Header="PackageId" Width="70" DisplayMemberBinding="{Binding Path=PackageId}" />
                        </GridView>
                    </ListView.View>
                </ListView>

对于 myHeaderStyle(关注 Selector.IsEnabled 属性和 IsEnabled 触发器)-

<Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="MinWidth" Value="50"/>
        <Setter Property="Selector.IsEnabled" Value="False"/>
        <Setter Property="FontSize" Value="16"/>
        <Setter Property="Background" Value="{StaticResource MainBackgroundBrush}"/>
        <Setter Property="Foreground" Value="{StaticResource MainForegroundBrush}"/>
        <Setter Property="BorderBrush" Value="#999"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="#111"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground" Value="#ccc"/>
            </Trigger>
        </Style.Triggers>
    </Style>

现在您将无法调整列的大小,它们也将被禁用。为此,只需在属性 IsEnabled 上添加一个触发器,它就会按照您想要的方式显示。

于 2019-02-14T09:42:42.660 回答