C# wpf帆布赢得';t调整大小
我正在努力学习WPF,但我已经陷入了僵局。问题是我有一个源自UIControl的控件,相关部分:C# wpf帆布赢得';t调整大小,c#,.net,wpf,wpf-controls,C#,.net,Wpf,Wpf Controls,我正在努力学习WPF,但我已经陷入了僵局。问题是我有一个源自UIControl的控件,相关部分: <Grid> <Border x:Name="OuterBorder" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderThickness="2" BorderBrush="Black"> <Canvas x:Name ="InternalCanvas" Wi
<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>
代码的目的是,如果类没有被继承,它应该显示某种占位符。确实如此
问题是InternalCanvas和它的eCpliping OuterOrder不会围绕新创建的nice标签调整大小
边框仍然是点边框,标签后面看不到InternalCanvas的象牙色背景
我在谷歌上搜索了很多,我相信我需要刷新或更新画布/控件元素,但我不再那么确定了。主要是通过观察许多Dispatcher.Invoke变体,我在不同的点上非常自由地应用了这些变体,每次都没有行为上的变化
WPF仍然对我有点偏袒,如果有人知道我如何解决这个问题,我确实有一个闪亮的“正确答案”要分发给他们
编辑1-结果屏幕截图:
请注意,通常缺少象牙色背景,而OuterBorder仍然是控件右上角的一个小工件,而childelement显然要大得多。您能告诉我们它是如何渲染的吗?我在一个新项目中尝试了您的xaml,但我不知道问题出在哪里对于您来说,“InternalCanvas”元素是画布类型是否重要? 因为如果改用网格作为示例,示例工作正常:
<Border x:Name="OuterBorder" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderThickness="2" BorderBrush="Black">
<Grid x:Name ="InternalGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Ivory">
</Grid>
</Border>
编辑:
这种行为的原因您可以在以下内容的备注部分中阅读:
Canvas是唯一没有固有布局特征的面板元素。画布的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。画布的子元素永远不会调整大小,它们只是定位在指定的坐标处。这为不需要或不需要固有大小限制或对齐的情况提供了灵活性。对于希望自动调整子内容大小和对齐的情况,通常最好使用网格元素
事实并非如此。虽然我仍然想知道为什么Canvas不会表现出这种行为,但我会将您的答案作为正确答案。谢谢!@StackLourger:也许这个链接可以帮助您理解这种行为。“画布的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。”哪些画布会这样做?
<Border x:Name="OuterBorder" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderThickness="2" BorderBrush="Black">
<Grid x:Name ="InternalGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Ivory">
</Grid>
</Border>