Wpf 如何在listview中获取自动调整宽度列的实际宽度?
我有一个非常简单的wpf列表视图Wpf 如何在listview中获取自动调整宽度列的实际宽度?,wpf,xaml,listview,Wpf,Xaml,Listview,我有一个非常简单的wpf列表视图 <ListView ItemsSource="{Binding items}" MinHeight="0"> <ListView.View> <GridView x:Name="columnsGridView"> </GridView> </ListView.View>
<ListView ItemsSource="{Binding items}" MinHeight="0">
<ListView.View>
<GridView x:Name="columnsGridView">
</GridView>
</ListView.View>
</ListView>
在listview的SizeChanged函数中,我运行了
foreach (var item in columnsGridView.Columns.Select((v, i)=> new {v, i}))
{
if (someCondition)
{
width += item.v.ActualWidth;
}
}
但我发现实际宽度始终为0,而宽度为NaN(这正是我需要的)
如果我指定它的宽度,那么我当然可以得到宽度。但是,在listview的SizeChanged func中,如何获取自动宽度项的宽度
附言。
我注意到,在这个函数之外,我可以获得它们的宽度。首先,我必须定义至少一列,以便显示项目:
<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>
现在您可以根据需要进行操作只需思考。。。新的{v,i}?这不意味着你实际上创建了一个新对象吗?这也解释了为什么它的实际宽度是0。。。但我可能错了--
<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>
private void ListView_Loaded(object sender, RoutedEventArgs e)
{
var test = GridViewInstance.Columns[0].ActualWidth;
}