将Viewbox绑定到画布

时间:2010-05-23 15:29:50

标签: wpf canvas binding

我正在尝试将Viewbox绑定到动态创建的Canvas,如下所示:

        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel>
                    <Viewbox>
                        <ContentPresenter Content="{Binding Canvas}"/>
                    </Viewbox>
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>

只要Canvas没有任何子女,这种情况就可以正常工作,但是Canvas有子女的情况很快就会显示出来。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

你怎么知道它有效? Canvas只是Panel,宽度/高度为零。即使它有任何孩子,它的尺寸仍然是0,0。您必须明确将WidthHeight设置为非零值才能显示。将以下代码段粘贴到XamlPad或仅在您自己的应用中进行测试。现在,删除WidthHeight,它将消失。

<Viewbox>
   <ContentPresenter>
      <ContentPresenter.Content>
         <Canvas Background="Red" Width="1" Height="1">
            <TextBlock Canvas.Left="10" Canvas.Top="20" Text="123" />
         </Canvas>
      </ContentPresenter.Content>
   </ContentPresenter>
</Viewbox>

答案 1 :(得分:0)

忘了我问过:-)

我在创建canvas的子项时引发了异常,这反过来又导致画布无法显示。我很伤心地说,这不是我第一次犯这样的错误,而且它可能不是最后一次可以:

TextBlock tb = new TextBlock();
tb.SetValue(Canvas.LeftProperty, 5);
tb.SetValue(Canvas.TopProperty, 5);

“5”不是“Left”或“Top”的有效值。它当然应该是

TextBlock tb = new TextBlock();
tb.SetValue(Canvas.LeftProperty, 5.0);
tb.SetValue(Canvas.TopProperty, 5.0);

因为它是作为数据绑定的一部分创建的,所以没有显示异常对话框。总而言之... DOOOOH :-) : - )

相关问题