2013-03-05 151 views
3

我想学习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+的信誉使我们开始吧:

No resize for this Canvas!

回答

2

“InternalCanvas”元素是否为canvas的类型对你来说很重要吗? 因为如果你使用例如网格代替,样品正常工作:

<Border x:Name="OuterBorder" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderThickness="2" BorderBrush="Black"> 
     <Grid x:Name ="InternalGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Ivory"> 
     </Grid> 
    </Border> 

编辑:

这样做的原因行为,你可以在remarks部分MSDN阅读:

画布是唯一没有固有布局特性的面板元素。 Canvas的默认高度和宽度属性为零,除非它是自动调整子元素大小的元素的子元素。Canvas的子元素永远不会调整大小,它们只是定位在他们指定的坐标上。这为不需要或不需要固有尺寸限制或对齐的情况提供了灵活性。对于希望子内容自动调整大小和对齐的情况,通常最好使用Grid元素。

+0

实际上并不是这样。虽然我仍然想知道为什么Canvas不会出现这种行为,但我会将您的答案作为正确答案。谢谢! – Stacklurker 2013-03-05 11:24:26

+0

@ Stacklurker:也许这个链接可以帮助你理解行为。 – rhe1980 2013-03-05 12:02:03

+0

“画布的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。”哪些人这样做的画布? – dumbledad 2017-11-29 14:16:24

2

你能告诉我们它是如何呈现的?我在一个新项目中尝试了你的xaml,我找不出什么问题

+1

完成后,我编辑了我的文章并添加了此链接 - http://i.imgur.com/qUFjsVh.jpg – Stacklurker 2013-03-05 09:36:02