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