【问题标题】:WPF: how can I have ListViewItems fit the window width and use TextEllipsisWPF:如何让 ListViewItems 适合窗口宽度并使用 TextEllipsis
【发布时间】:2011-10-23 07:36:57
【问题描述】:

我目前正在使用 ListView。它的 ListViewItems 由一个左对齐的 TextBlock 和一个右对齐的 Button 组成:

现在,我想让我的项目始终显示 Button 并相应地缩短 TextBlock,因此它们不需要显示 ScrollBar:

不幸的是,现在这不起作用:

我该怎么做才能让它发挥作用? 这是我的示例代码:

<Window x:Class="JansWpfTestUmgebung.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ListView x:Name="AllItemsList"
              HorizontalContentAlignment="Stretch"
              HorizontalAlignment="Stretch">
        <ListViewItem>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0"
                       TextTrimming="CharacterEllipsis" 
                       Text="Item 1 with a very long description"/>
            <Button Grid.Column="1"
                    Content="Modify" />
        </Grid>
    </ListViewItem>
        <ListViewItem>Item 2</ListViewItem>
        <ListViewItem>Item 3</ListViewItem>
    </ListView>
</Window>

感谢您的任何提示! :-)

【问题讨论】:

    标签: wpf listview scrollbar listviewitem


    【解决方案1】:

    您可以通过在按钮列上强制设置大小来做到这一点:

    <Window
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
            mc:Ignorable="d" 
            x:Class="JansWpfTestUmgebung.MainWindow"
            d:DesignWidth="394">
        <ListView x:Name="AllItemsList"
                  HorizontalContentAlignment="Stretch"
                  HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListViewItem>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="45" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0"
                    TextTrimming="CharacterEllipsis" 
                    Text="Item 1 with a very long description"/>
                <Button Grid.Column="1"
                        Content="Modify"/>
            </Grid>
        </ListViewItem>
            <ListViewItem Content="Item 2"/>
            <ListViewItem Content="Item 3"/>
        </ListView>
    </Window>
    

    按照原来的方式,它尽最大努力保持 * 大小的列尽可能大,但牺牲了 Auto 大小的列。但是固定尺寸会胜过 * 尺寸。

    【讨论】:

    • 非常感谢!你的代码对我有用。有趣的是,它似乎不仅仅是 Button 列的固定宽度,而且还明确禁用了您添加的 ScrollBar。再次感谢:-)
    • 啊。没问题。 很高兴我能帮上忙。
    【解决方案2】:

    最重要的部分是这些

    <ListView HorizontalContentAlignment="Stretch"
              ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
    

    这样您的 ListViewItems 将填满空间,而禁用的水平滚动条将阻止它们占用更多空间。

    我的代码是这样的

    <ListView HorizontalContentAlignment="Stretch"
              ScrollViewer.HorizontalScrollBarVisibility="Disabled"
              ItemsSource="{Binding MyItemSourceList}"
              Width="{Binding ActualWidth, ElementName=SearchBox}"
              >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0" 
                                   Text="{Binding Name}" 
                                   TextTrimming="CharacterEllipsis"/>
                        <TextBlock Grid.Column="1" 
                                   Text="{Binding Tag}" 
                                   HorizontalAlignment="Right" 
                                   FontWeight="Bold" 
                                   Foreground="LightGray"/>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
    </ListView>
    

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      相关资源
      最近更新 更多