c# - 为什么 ListBox 的 DesiredSize.Width 始终为零?

标签 c# wpf listbox uielement

我正在用 C# 创建一个自定义控件,并希望有一个包含列表框的网格单元格,它可以根据需要隐藏或显示。隐藏它很容易,我只需将宽度设置为零,但是当我想显示它时,我需要知道 ListBox 想要使用的宽度。

我以为 DesiredSize.Width 会给我这个值,但它始终为零,即使在调用 Measure() 之后也是如此。这是我用来显示列表框的代码...

_lb.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
_lb.Width = _lb.DesiredSize.Width;

关于如何找到所需宽度的任何想法?

最佳答案

如果您的 ListBox位于网格的单元格中,为该网格列命名。然后在代码中,您可以访问 .ActualWidth该网格列的属性并使用该值来设置 ListBox 的宽度.

这当然假设您的网格列的宽度未设置为 Auto ,因为那仍然会给你一个 0值(value)。

_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中,以上代码返回值227.53对于 width多变的;使用我的默认字体系列和大小。

如果ListBox还没有被添加到窗口,或者里面没有任何项目,它将返回 0对于 .DesiredSize.Width属性(property)。

此外,如果 .Visibility属性设置为 Collapsed而不是 Hidden , 宽度将为 0。

启动时不要将宽度设置为0。最初保留宽度,设置 .VisibilityHidden .它将渲染到所需的宽度,但不会显示。然后你可以测量它并开始调整宽度。

关于c# - 为什么 ListBox 的 DesiredSize.Width 始终为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742447/

相关文章:

wpf - 如何绑定(bind) RibbonComboBox 数据?

c# - .NET JIT 如何确定如何添加数字

c# - 如何阻止异步 tcp .NET 代码用完整个系统的资源

c# - 我在 Linq To SQL 数据上下文中遇到空引用异常,我什至不知道从哪里开始

c# - 带有代码的错误模板的文本框

c# - 检查 Windows 应用程序的更新功能

wpf - 将列表框项索引作为参数传递给 objectdataprovider

excel - 使用货币格式设置多范围列表框的格式

excel - 列表框未显示使用 Listbox.List 方法填充其中的值

c# - 想不出解决这个多对多的查询