WPF中GridView动态列宽

4
<Window x:Class="GridViewSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" >
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <ListView Name="CheckoutList" Margin="0,0,8,0">
        <ListView.View>
            <GridView x:Name="CheckOutGridView">
                <GridView.ColumnHeaderContainerStyle>
                    <Style TargetType="{x:Type GridViewColumnHeader}">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </Style>
                </GridView.ColumnHeaderContainerStyle>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock> 
                                <Hyperlink >          
                                    <TextBlock Text="{Binding Path=Text}"/> 
                                </Hyperlink> 
                            </TextBlock>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock> 
                                <Hyperlink>          
                                    <TextBlock Text="Remove"/> 
                                </Hyperlink> 
                            </TextBlock>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

    <StackPanel Grid.Row="1">
        <Button Width="100" Height="25" Click="Button_Click" >name</Button>
        <Button Width="100" Height="25" Click="Button_Click1" >long name</Button>
    </StackPanel>
</Grid>

public partial class Window1 : Window
{
    class TextObject
    {
        private string _text;

        public TextObject(string Text)
        {
            _text = Text;
        }

        public string Text
        {
            get { return _text; }
            set { _text = value; }
        }
    }


    public Window1()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        CheckoutList.Items.Add(new TextObject("name"));
    }

    private void Button_Click1(object sender, RoutedEventArgs e)
    {
        CheckoutList.Items.Add(new TextObject("long name"));
    }

}

在上面的示例中,给定了新闻名称和长名称。为什么该列不会自动调整大小以适应其内容?

1个回答

0

尝试

<GridViewColumn Width="{x:Static System:Double.NaN}">

在哪里

xmlns:System="clr-namespace:System;assembly=mscorlib"

这应该可以帮助您调整列的大小以适应标头内容。


它能够工作,是因为将列宽设置为NaN允许该列测量到无限大,从而填满其父容器的所有空间。 - Tri Q Tran
但是不是有一个Double.PositiveInfinity吗?这种行为是通过编程实现的(比如某处检查了Double.IsNan(width)并在GridViewColumn代码中将其设置为Auto),还是由于Double.Nan本身的特性? - Jason Ridge
1
这不是Double.NaN的本质,而是WPF测量其可用宽度与容器宽度的本质。通过将列宽设置为Double.NaN,可以通过“不设置固定宽度”来“愚弄”WPF,并创建“自动”宽度的幻觉。 - Tri Q Tran
这不就是和 Width="Auto" 一样吗?至少对我来说是这样,因为我得到了相同的结果。 - imekon
据我所知,Width="Auto" 存在性能问题,因为它需要等待所有行加载完成才能定义其宽度。在数据列上真的不建议使用。 - HichemSeeSharp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接