如何在列表视图中获取自动调整宽度列的ActualWidth?

时间:2015-05-20 08:36:07

标签: wpf xaml listview

我有一个非常简单的wpf listview

        <ListView ItemsSource="{Binding items}" MinHeight="0">
            <ListView.View>
                <GridView x:Name="columnsGridView">
                </GridView>
            </ListView.View>
        </ListView>

我将它与某个类绑定以显示

aaa bbb ccc

并在listview的SizeChanged函数中运行

            foreach (var item in columnsGridView.Columns.Select((v, i)=> new {v, i}))
            {
                if (someCondition)
                {
                    width += item.v.ActualWidth;
                }
            }

但是我发现ActualWidth总是0而Width是NaN(这就是我需要的)

如果我指定它的宽度,那么我当然可以获得宽度。但是如何在listview的SizeChanged函数中获得自动宽度项的宽度?

P.S。 我注意到在这个函数之外我可以得到它们的宽度..

1 个答案:

答案 0 :(得分:0)

首先,我必须定义至少一列才能显示项目:

BufferedInputStream.read()

现在使用LoadedEvent显示项目,您可以获得实际宽度:

 <ListView MinHeight="0" Loaded="ListView_Loaded" >

        <ListView.View>
            <GridView  x:Name="GridViewInstance">
                <GridViewColumn  DisplayMemberBinding="{Binding}" Header="First Name" />
            </GridView>

        </ListView.View>

        <ListView.Items>
            <sys:String>1</sys:String>
            <sys:String>2</sys:String>
            <sys:String>3</sys:String>
            <sys:String>4</sys:String>
            <sys:String>5</sys:String>
            <sys:String>6</sys:String>
            <sys:String>7</sys:String>
        </ListView.Items>
    </ListView>

现在您可以根据需要进行操作