Wpf 将Viewbox绑定到画布

Wpf 将Viewbox绑定到画布,wpf,canvas,binding,Wpf,Canvas,Binding,我正在尝试将视图框绑定到动态创建的画布,如下所示: <ListBox.ItemTemplate> <DataTemplate> <DockPanel> <Viewbox> <ContentPresenter Content="{Binding Canvas}"/>

我正在尝试将
视图框
绑定到动态创建的
画布
,如下所示:

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


只要
Canvas
没有任何子项,这就可以正常工作,但只要
Canvas
有子项,它就不会显示。我在这里遗漏了什么?

你怎么知道它有用?
Canvas
只是一个宽度/高度为零的
面板。即使它有子元素,它的维度仍然是0,0。必须将
宽度
高度
显式设置为非零值才能显示。将以下代码片段粘贴到
XamlPad
中,或者在自己的应用程序中进行测试。现在,移除
宽度
高度
,它将消失

<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>

忘了我曾经问过:-)

我在创建画布的子对象时引发了一个异常,这反过来又导致画布无法显示。我很难过地说,这不是我第一次犯这样的错误,也可能不是最后一次:

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:-) :-)