【问题标题】:how to fix the column width of a listview in c# windows form?如何在 c# windows 窗体中修复列表视图的列宽?
【发布时间】:2011-01-28 10:52:59
【问题描述】:

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

【问题讨论】:

    标签: c# listview width fixed


    【解决方案1】:

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

    private void listView_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
    {
        e.Cancel = true;
        e.NewWidth = listView.Columns[e.ColumnIndex].Width;
    }
    

    【讨论】:

    • 这又是一个例子,说明为什么使用 ListView 如此困难——很难把所有事情都做好。此代码不会捕获通过键盘调整列大小的尝试,尤其是 Ctrl-Numpad-+。即使使用此事件处理程序,这会将所有列的大小调整为最小计算宽度。调整大小后,用户将无法再次放回它们。
    • 天哪,我不知道 Ctrl-Numpad-+
    • 如果在窗口中全局关闭“拖动时显示窗口内容”,这将不起作用 - 该事件永远不会发生。
    • 这似乎不适用于 Server 2008 R2,但不完全确定原因。在 Windows 7 和 8 上完美运行。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      非常感谢我在 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
      

      【讨论】:

        【解决方案4】:

        实现此目的的一种方法是将 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 上添加一个触发器,它就会按照您想要的方式显示。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-08
          • 1970-01-01
          • 2012-08-02
          • 2021-11-17
          • 1970-01-01
          相关资源
          最近更新 更多