动态创建的Silverlight控件不可见

时间:2009-05-19 09:38:47

标签: silverlight dynamic visibility

我在Silverlight 2中动态添加自定义控件但它们不可见。但是,在检查Silverlight Spy中的可视树时,我注意到它们的可见性属性是Visible,并将其切换为Collapsed并返回Visible会导致控件变为可见。

我可能做错了什么?关于我应该寻求解决这个问题的任何想法?

4 个答案:

答案 0 :(得分:2)

在ParentControl上的UpdateLayout()没有必要。

但不要忘记my_parent_control.Add(UIElement mynewcontrol);

即。 my_parent_control可以是一个堆栈面板。

答案 1 :(得分:1)

首先想到的是你使用什么样的容器对象来创建动态控件(如果有的话)?

我可以看到如果在不使用容器的情况下添加控件可能会给您带来一些问题。 我不能说我已经动态创建了许多控件对象,但我认为将您的项目添加到堆栈面板将是最简单的实现。

一个好的测试用例可能是创建网格并在创建控件时为其分配网格位置。

这是关于如何做到这一点的link

答案 2 :(得分:1)

您是否尝试在要添加它们的控件上调用UpdateLayout()?

答案 3 :(得分:1)

我已经能够解决问题,这是在我将时间段动态添加到时间轴时发生的。

我动态添加到画布的控件具有以下结构。

<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后立即