【问题标题】:GridView dynamic column width in WPFWPF中的GridView动态列宽
【发布时间】:2009-09-30 23:17:50
【问题描述】:
<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"));
    }

}

给定上面的示例印刷机名称,然后是长名称。为什么该列不调整大小以适应其内容?

【问题讨论】:

    标签: wpf gridview listview


    【解决方案1】:

    试试

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

    在哪里

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

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

    【讨论】:

    • 它可以工作,因为将列宽设置为 NaN 允许该列测量为无穷大,从而填满其父容器的所有空间。
    • 但是没有Double.PositiveInfinity吗?这种行为是编程的(就像他们在某处检查Double.IsNan(width)并将其设置为GridViewColumn的代码中的Auto)还是由于Double.Nan本身的性质?
    • 这不是 Double.NaN 的本质,而是 WPF 的本质,用于测量其可用宽度与容器宽度。通过将列宽设置为 Double.NaN 将通过“不设置固定宽度”来“欺骗”WPF,这会产生“自动”宽度的错觉。
    • 这和Width="Auto"不一样——至少对我来说是这样,因为我得到了相同的结果。
    • @imekon 据我所知 Width="Auto" 存在性能问题,因为它应该等待所有行都被加载,以便它可以定义其宽度。确实不建议在数据列上使用。
    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多