为什么ListBox's DesiredSize.宽度总是零
本文关键字:DesiredSize ListBox 为什么 | 更新日期: 2023-09-27 18:13:06
我正在c#中创建一个自定义控件,并希望有一个包含ListBox的网格单元格,可以根据需要隐藏或显示。隐藏它很容易,我只是将宽度设置为零,但是当我想显示它时,我需要知道ListBox想要使用的宽度。
我认为DesiredSize。Width会给我这个值,但它总是零,即使在调用Measure()之后。下面是我用来显示ListBox的代码…
_lb.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
_lb.Width = _lb.DesiredSize.Width;
任何想法我如何找到所需的宽度?
如果您的ListBox
位于网格的单元格中,则为该网格列指定一个名称。然后在代码中,您可以访问该网格列的.ActualWidth
属性并使用该值来设置ListBox
的宽度。
当然,假设您的网格列的宽度没有设置为Auto
,因为这仍然会给您一个0
值。
_lb.Width = myGridColumn.ActualWidth
你可能需要从列宽中减去一点,以使你的控件适合。
编辑
我发现的一件事是ListBox
必须有项目添加到它之前,它将返回0
以外的任何东西,当它被测量。
string myItem = "Don't ask for a bath in Athabaska";
_lb.Items.Add(myItem);
_lb.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
double width = _lb.DesiredSize.Width;
只要ListBox
已经被添加到window/usercontrol/grid中,上面的代码就会为width
变量返回227.53
的值;使用我的默认字体系列和大小。
如果ListBox
没有被添加到窗口中,或者它没有任何项目,它将为.DesiredSize.Width
属性返回0
。
同样,如果将.Visibility
属性设置为Collapsed
而不是Hidden
,则宽度将为0。
开始时不要将宽度设置为0。最初保持宽度不变,将.Visibility
设置为Hidden
。它将呈现所需的宽度,但不会显示。然后你可以测量它,并开始摆弄宽度