gpt4 book ai didi

c# - GridViewColumn autosize 只工作一次

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:46 24 4
gpt4 key购买 nike

我在应用程序退出时存储列宽并在启动时恢复它们。除非用户双击标题,否则一切正常。这会导致列宽变为 double.NaN,据我所知这是一个用于自动调整大小的标志。那我就有问题了。

在调查该问题时,我注意到将列宽设置为 NaN 将启用自动调整大小,但仅一次

这是一个重现:

<ListView x:Name="listView">
<ListView.View>
<GridView>
<GridViewColumn Header="A" Width="NaN" />
</GridView>
</ListView.View>
</ListView>

然后添加两个带有以下点击处理程序的按钮:

void button1_Click(object sender, RoutedEventArgs e) => listView.Items.Add("abcd");
void button2_Click(object sender, RoutedEventArgs e) => listView.Items.Add("ABCDEFGHIJKL");

首先单击 button1 将自动调整列大小以适应 "abcd"。然后点击 button2 不会。

为什么?是否有解决方法让它始终自动调整大小或至少禁用用户双击调整大小(尝试 this solution 但没有成功)?

最佳答案

您需要在每次更新时重置列的宽度:

void button2_Click(object sender, RoutedEventArgs e)
{
listView.Items.Add("ABCDEFGHIJKL");
GridView gv = listView.View as GridView;
gv.Columns[0].Width = gv.Columns[0].ActualWidth;
gv.Columns[0].Width = double.NaN;

}

要禁用双击调整大小,您可以像这样处理 GridViewColumnHeaderPreviewMouseLeftButtonDown 事件:

<ListView x:Name="listView">
<ListView.View>
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="listView_PreviewMouseLeftButtonDown"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn Header="A" Width="Auto" />
</GridView>
</ListView.View>
</ListView>

private void listView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) =>
e.Handled = e.ClickCount == 2;

关于c# - GridViewColumn autosize 只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com