我在 Silverlight 2 中动态添加自定义控件,但它们不可见。但是,在检查 Silverlight Spy 中的可视化树时,我注意到它们的可见性属性是可见的,将其切换到折叠并返回可见会导致控件变得可见。
我可能做错了什么?关于我应该寻找什么来解决这个问题的任何想法?
我在 Silverlight 2 中动态添加自定义控件,但它们不可见。但是,在检查 Silverlight Spy 中的可视化树时,我注意到它们的可见性属性是可见的,将其切换到折叠并返回可见会导致控件变得可见。
我可能做错了什么?关于我应该寻找什么来解决这个问题的任何想法?
不需要 ParentControl 上的 UpdateLayout()。
但不要忘记 my_parent_control.Add(UIElement mynewcontrol);
即 my_parent_control 可以是堆栈面板。
首先想到的是您使用哪种容器对象来创建动态控件(如果有的话)?
我可以看到在不使用容器的情况下添加控件可能会给您带来一些问题。我不能说我已经动态地创建了许多控件对象,但我认为将您的项目添加到堆栈面板将是最简单的实现。
一个好的测试用例可能是创建一个网格并在创建控件时为其分配网格位置。
这是有关如何执行此操作的链接。
您是否尝试过在要添加它们的控件上调用 UpdateLayout()?
我已经能够解决这个问题,这个问题发生在我将时间段动态添加到时间线时。
我动态添加到画布的控件具有以下结构。
<Path x:Name="ribbonItem" Fill="Green">
<Path.Data>
<GeometryGroup>
<RectangleGeometry x:Name="ribbonItemBackground" />
</GeometryGroup>
</Path.Data>
</Path>
RectangleGeometry 的尺寸取决于三个输入,时间线栏和时间线项目(我正在添加的内容)的日期和时间范围以及栏(画布)的尺寸。
当设置对象的任何 BarRange、ItemRange 或 BarSize 属性时,将调用以下方法。
private void Resize()
{
if (_itemRange != null && _barRange != null && _barSize != Size.Empty)
{
ribbonItemBackground.Rect = ItemRectangle();
}
}
这导致了我的问题中提到的绘图问题,解决方案是添加
ribbonItem.InvalidateMeasure();
设置ribbonItemBackground.Rect 后立即。