【发布时间】:2014-07-14 17:39:15
【问题描述】:
我在 C# 中创建一个自定义控件,并希望有一个包含 ListBox 的网格单元,可以根据需要隐藏或显示。隐藏很简单,我只是将 Width 设置为零,但是当我想显示它时,我需要知道 ListBox 想要使用的宽度。
我认为 DesiredSize.Width 会给我这个值,但它始终为零,即使在调用 Measure() 之后也是如此。这是我用来显示 ListBox 的代码...
_lb.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
_lb.Width = _lb.DesiredSize.Width;
任何想法如何找到所需的宽度?
【问题讨论】:
-
我建议使用:
_lb.Visible = false;隐藏它,使其可见:_lb.Visible = true;。列表框应该有多大,是否有静态值,或者它必须与另一个组件具有相同的宽度? -
我想设置实际宽度,这样我可以在显示或隐藏它时对其进行动画处理。我没有宽度的静态值,如果列表框具有所需的所有空间,我想获取列表框的宽度。
-
列表框是否在容器中,如表单或面板?如果有,它是如何调用的,是一种什么样的控件?
-
我创建了一个继承自 UserControl 的类,并覆盖了 OnInitialized 事件。在那里,我创建了一个 Grid,它被设置为我的控件的 Content 属性。我像在 XAML 中一样设置网格及其子控件,只是我必须编写 C# 来代替。这有帮助吗?不知道你在做什么。
-
考虑创建一个Custom Panel,它仅支持具有 ScaleX 依赖属性的单个子级。它可以测量其单个子元素并为其提供等于 ScaleX*DesiredWidth 的宽度(这与它应该为其所有者容器提供的宽度与其自己的 DesiredWidth 相同。)如果您随后为 ScaleX 属性设置动画,它将导致重复的布局更新将孩子适当地重新缩放到最终所需的宽度。