首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在WPF中自动调整大小和右对齐GridViewColumn数据?

如何在WPF中自动调整大小和右对齐GridViewColumn数据?
EN

Stack Overflow用户
提问于 2009-02-18 18:52:30
回答 13查看 157.3K关注 0票数 90

我如何:

  • 右对齐ID列中的文本
  • 使每个列根据具有最长可见数据的单元格的文本长度自动调整大小-

代码如下:

代码语言:javascript
运行
复制
<ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Id}" Width="40"/>
            <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="100" />
            <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}"/>
        </GridView>
    </ListView.View>
</ListView>

部分答案:

感谢Kjetil,GridViewColumn.CellTemplate运行得很好,自动宽度当然也工作得很好,但是当ObservativeCollection“集合”被更新为比列宽更长的数据时,列大小不会自动更新,因此这只是一种用于初始数据显示的解决方案:

代码语言:javascript
运行
复制
<ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="ID" Width="Auto">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Id}" TextAlignment="Right" Width="40"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="Auto" />
            <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}" Width="Auto"/>
        </GridView>
    </ListView.View>
</ListView>
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-02-18 11:23:53

要使每一列自动调整大小,可以在GridViewColumn上将Width=设置为“自动”。

要右对齐ID列中的文本,可以使用TextBlock创建单元格模板并设置TextAlignment。然后设置ListViewItem.HorizontalContentAlignment (在ListViewItem上使用带有setter的样式),使单元格模板填充整个GridViewCell。

也许有一个更简单的解决方案,但这应该是可行的。

注意:该解决方案既需要HorizontalContentAlignment=Stretch in Window.Resources,也需要CellTemplate中的TextAlignment=Right

代码语言:javascript
运行
复制
<Window x:Class="WpfApplication6.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</Window.Resources>
<Grid>
    <ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="ID" Width="40">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Id}" TextAlignment="Right" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="Auto" />
                <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}" Width="Auto"/>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>
</Window>
票数 106
EN

Stack Overflow用户

发布于 2009-12-19 08:14:54

如果内容的宽度发生变化,则必须使用下面这段代码来更新每一列:

代码语言:javascript
运行
复制
private void ResizeGridViewColumn(GridViewColumn column)
{
    if (double.IsNaN(column.Width))
    {
        column.Width = column.ActualWidth;
    }

    column.Width = double.NaN;
}

您必须在该列的数据每次更新时触发它。

票数 39
EN

Stack Overflow用户

发布于 2011-06-30 10:36:17

如果您的listview也在调整大小,那么您可以使用行为模式来调整列的大小,以适应整个ListView宽度。几乎与使用grid.column定义相同

代码语言:javascript
运行
复制
<ListView HorizontalAlignment="Stretch"
          Behaviours:GridViewColumnResize.Enabled="True">
        <ListViewItem></ListViewItem>
        <ListView.View>
            <GridView>
                <GridViewColumn  Header="Column *"
                                   Behaviours:GridViewColumnResize.Width="*" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox HorizontalAlignment="Stretch" Text="Example1" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>

请参阅以下链接以获取一些示例以及指向源代码http://lazycowprojects.tumblr.com/post/7063214400/wpf-c-listview-column-width-auto的链接

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/560581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档