WPF Canvas子控件Label无法居中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF Canvas子控件Label无法居中相关的知识,希望对你有一定的参考价值。

前台XAML代码:
<Canvas Name="hscrollCanvas" Grid.Column="0" ClipToBounds="True"> <Label Name="lbMessage" Height="50" FontSize="32" FontWeight="Bold" VerticalContentAlignment="Top" FontFamily="STZhongsong" Margin="0,0,0,0" Foreground="White" TextOptions.TextFormattingMode="Display" TextOptions.TextHintingMode="Fixed" TextOptions.TextRenderingMode="ClearType"/> </Canvas>
后台CS代码:
hscrollCanvas.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; lbMessage.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; lbMessage.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center;
我这样设置了为啥lbMessage的内容没有居中啊

因为Canvas的作用是确定控件的坐标的,所以内部的控件都必须有明确坐标才可以。也就是必须设置Margin
你可以在Canvas内部加个Grid应该就能解决你问题。
参考技术A 在blend4里面编辑试试,把label拖到中间,看看代码然后变化

WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系

WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系:

1、Canvas/WrapPanel控件:

  其子控件的HorizontalAlignment/VerticalAlignment属性无效。
2、Grid控件:

  其子控件的HorizontalAlignment/VerticalAlignment属性有效。
3、StackPanel控件:

  A、当其Orientation属性等于Horizontal时,其子控件的HorizontalAlignment属性无效,VerticalAlignment属性有效。

  B、当其Orientation属性等于Vertical时,其子控件的HorizontalAlignment属性有效,VerticalAlignment属性无效。

4、DockPanel控件:

  A、(适用于非末位子控件)当其子控件设定DockPanel.Dock=Left/Right时,其子控件的HorizontalAlignment属性无效,VerticalAlignment属性有效。

  B、(适用于非末位子控件)当其子控件设定DockPanel.Dock=Top/Bottom时,其子控件的HorizontalAlignment属性有效,VerticalAlignment属性无效。

  C、当其LastChildFill属性等于true时,其最后一个子控件的DockPanel.Dock无效,HorizontalAlignment属性有效,VerticalAlignment属性有效。

  D、当其LastChildFill属性等于false时,其最后一个子控件的DockPanel.Dock有效,此时,如果该子控件设定DockPanel.Dock=Left/Right时,该子控件的HorizontalAlignment属性无效,VerticalAlignment属性有效,而如果该子控件设定DockPanel.Dock=Top/Bottom时,该子控件的HorizontalAlignment属性有效,VerticalAlignment属性无效。

以上是关于WPF Canvas子控件Label无法居中的主要内容,如果未能解决你的问题,请参考以下文章

在 wpf C# 中禁用自定义父项时启用子控件

2021-08-17 WPF控件专题 Canvas 控件详解

WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系

wpf groupbox无法动态添加子控件

WPF 如何向用户控件中添加新的控件

想让label控件居中,但label中的文字居左,应该怎么办?