我正在尝试学习 WPF,但我陷入了僵局。问题是我有一个从 UIControl 派生的控件,相关部分:
<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 不会围绕新创建的 nice 标签调整大小。
边框仍然是点边框,标签后面看不到 InternalCanvas 的象牙色背景。
我用谷歌搜索了很多,相信我需要刷新或更新画布/控制元素,但我不再那么确定了。主要是通过观察大量的 Dispatcher.Invoke 变体,我在不同点的代码中非常自由地应用了这些变体,每次都没有行为变化。
WPF 对我来说还是有点倾斜,如果有人知道我如何解决这个问题,我确实有一个闪亮的“正确答案”可以分发。:)
编辑 1 - 结果的屏幕截图:
请注意象牙色背景的普遍缺乏,并且 OuterBorder 仍然是控件右上角的一个小工件,而子元素显然要大得多。