我想学习WPF,但我已经陷入僵局。问题是我有一个控制派生自UIControl,相关部分:WPF画布不会调整大小
<Grid>
<Border x:Name="OuterBorder" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderThickness="2" BorderBrush="Black">
<Canvas x:Name ="InternalCanvas" Width="Auto" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Ivory">
</Canvas>
</Border>
</Grid>
这给了我一个黑点,当我呈现控件;我认为这是边界。
我再InitizializeComponents后添加代码,构造函数:
Label l = new Label();
l.Content = "HELLO";
l.BorderThickness = new Thickness(2);
l.BorderBrush = Brushes.Bisque;
if (this.GetType() == typeof(SO.SOGraphNode))
this.InternalCanvas.Children.Add(l);
代码的目的是,如果没有继承的类,它应该表现出一定的占位符。它做什么。
问题是,InternalCanvas和它的ecplipsing OuterBorder不会调整周围新创建的漂亮标签。
边框仍然是一个点边框,InternalCanvas'象牙背景没有出现在标签后面。
我已经GOOGLE了这很多,beliving,我需要刷新或更新画布/控制元素,但我不太确定了。主要是通过观察很多Dispatcher.Invoke变体,我每次在行为上都没有改变,在不同的点上通过代码非常自由地应用变体。
WPF对我来说还是有点倾斜,如果有人知道我能如何解决这个问题,我确实有一个闪亮的“正确答案”来解决这个问题。 :)
编辑1 - 截图效果:
我需要10的声誉,发布图片,这是我所没有的。这里是一个链接imgur:
http://i.stack.imgur.com/7LELP.jpg
通知书普遍缺乏象牙背景,OuterBorder仍停留在控制topright角落一个小神器同时是childElement显然大得多。
编辑2 - 我现在有10+的信誉使我们开始吧:
实际上并不是这样。虽然我仍然想知道为什么Canvas不会出现这种行为,但我会将您的答案作为正确答案。谢谢! – Stacklurker 2013-03-05 11:24:26
@ Stacklurker:也许这个链接可以帮助你理解行为。 – rhe1980 2013-03-05 12:02:03
“画布的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。”哪些人这样做的画布? – dumbledad 2017-11-29 14:16:24