GridViewColumn.宽度绑定,双击可自动调整列的大小
本文关键字:调整 绑定 双击 GridViewColumn | 更新日期: 2023-09-27 17:54:49
像这样绑定列宽度
<ListView ...>
<ListView.View>
<GridView>
<GridViewColumn Width="{Binding Width, Mode=TwoWay}" ... />
... more columns
</GridView>
</ListView.View>
</ListView>
问题:当双击列标题行(自动调整列的大小)没有触发Width
setter,这意味着绑定源在这样的列宽度改变后没有更新。正常的列大小调整没有问题。
建议吗?
我不想阻止双击自动调整大小,只是为了修复一个问题。
查看双击处理程序源代码,看起来应该更新Width
属性。也许是装订出了什么问题?您可能希望将绑定设置为详细的,并查看输出窗口中打印的内容。
撇开这个问题不谈,绑定到Width
属性可能无法获得想要的行为。从双击处理程序可以看出,它被设置为NaN
以使列自动调整大小。这意味着即使你的属性设置器被调用,它也会得到传递给它的NaN
。您可以使用OneWayToSource
绑定模式绑定到ActualWidth
,除非由于其他原因实际上需要绑定到TwoWay
。
在我的例子中,我已经解决了这个问题:
1。我有一个属性"_gridView",它是GridView对象,表示ListView的视图,其名称为"_listView"。
<ListView x:Name="_listView">
<ListView.View>
<GridView x:Name="_gridView">
<GridViewColumn Header="Whatever"/>
</GridView >
</ListView.View>
</ListView>
2。我添加了另一段代码来更新GridView列的宽度。这是基于。net对GridViewColumnHeader的引用。
private void UpdateWidths()
{
foreach (var column in this._gridView.Columns)
{
column.Width = column.ActualWidth;
column.Width = Double.NaN;
}
}
3。在WPF窗口的构造函数中,我插入了其他代码来执行每次"_listView"的"ItemsSource"更改时的宽度更新:
public MainWindow()
{
InitializeComponent();
DependencyPropertyDescriptor
.FromProperty(ListView.ItemsSourceProperty, typeof(ListView))
.AddValueChanged(_listView, (s, e) => {
UpdateWidths();
});
}
4。因此,每次我更改对象"_listView"的"ItemsSource"属性时,所有列都会更新。
_listView.ItemsSource = __New value__
我宁愿删除我的问题,但也许它会对犯同样错误的人有用(我怀疑)。
问题是Width
类型。我使用int
,它似乎工作完美无缺。但是不管什么原因,双击调整大小就不行。
double Width {get; set;}
绑定,而不是int
。