首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridViewColumn宽度调整

GridViewColumn宽度调整
EN

Stack Overflow用户
提问于 2012-02-01 01:18:59
回答 2查看 16.6K关注 0票数 6

我的UI:

代码语言:javascript
复制
<ListView Name="persons" SelectionChanged="persons_SelectionChanged">
        <ListView.View>
            <GridView AllowsColumnReorder="False">
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="auto"/>
                <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" Width="auto"/>
            </GridView>
        </ListView.View>
    </ListView>

我的UI的代码幕后:

代码语言:javascript
复制
internal void Update(IEnumerable<Person> pers)
    {
        this.persons.ItemsSource = null;
        this.persons.ItemsSource = pers;
        UpdateLayout();
    }

我的实体:

代码语言:javascript
复制
class Person
{
   public string Name { get; set; }
   public int Age { get; set; }
}

GridViewColumns具有GridViewColumn-Header的宽度。即使我对具有长名字的Person调用Update()。不会调整列的大小。

a)如何自动调整" Name "-column的大小(当我调用Update时)为最长名称的长度,但不能长于一个值x(我想指定一个列的最大宽度)?

b)如何指定“年龄”-Column填充控件末端的空间(以便网格视图的列使用控件的整个宽度)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-01 06:36:38

GridView不会自动调整大小。

要调整列的大小,可以执行以下操作

代码语言:javascript
复制
    foreach (GridViewColumn c in gv.Columns)
    {
        // Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector)
        // i.e. it is the same code that is executed when the gripper is double clicked
        // if (adjustAllColumns || App.StaticGabeLib.FieldDefsGrid[colNum].DispGrid)
        if (double.IsNaN(c.Width))
        {
            c.Width = c.ActualWidth;
        }
        c.Width = double.NaN;
     }  

至于最后要填充的区域的大小,我用转换器来做。我认为这个转换器并不能完全满足您的需求,但它应该可以帮助您入门。

代码语言:javascript
复制
    <GridViewColumn Width="{Binding ElementName=lvCurDocFields, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=100}">


    [ValueConversion(typeof(double), typeof(double))]
    public class WidthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // value is the total width available
            double otherWidth;
            try
            {
                otherWidth = System.Convert.ToDouble(parameter);
            }
            catch
            {
                otherWidth = 100;
            }
            if (otherWidth < 0) otherWidth = 0;

            double width = (double)value - otherWidth;
            if (width < 0) width = 0;
            return width; // columnsCount;

        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

GridView速度很快,但需要一些时间来照看孩子。

票数 8
EN

Stack Overflow用户

发布于 2012-02-01 01:32:20

我从How to autosize and right-align GridViewColumn data in WPF?那里拿到了这个

代码语言:javascript
复制
<Window.Resources>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</Window.Resources>

对你有帮助吗?

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

https://stackoverflow.com/questions/9083933

复制
相关文章

相似问题

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