WPF - 如何在Canvas中居中控件(标签)

9

您好

我正在尝试修复我的WPF应用程序中控件的定位。在我的应用程序中,我有几个标签,每个标签都在不同的画布中。我正在尝试将标签居中于画布中。目前针对一个标签的代码如下:

<Canvas Height="42" HorizontalAlignment="Left" Margin="0,1,0,0" Name="canvasPlayer1" VerticalAlignment="Top" Width="172" >
    <Label Content="" Foreground="White" FontSize="15" FontFamily="Eurostile LT ExtendedTwo" Height="Auto" HorizontalAlignment="Center" Margin="0,5,0,0" Name="labelPlayer1Name" VerticalAlignment="Center" Width="Auto" />
</Canvas>

首先,这个问题是它并没有将文本居中,而是保持在原始位置。我的目标是将标签的内容居中显示在画布中,但不能超出画布的宽度。

欢迎提供有用的建议!如果您对我解决此问题的思路有任何评论,请告知我!

谢谢您的帮助!


1
你为什么使用Canvas?你必须要画些什么吗?使用Grid代替。 - Lukasz Madon
可能是在WPF中获取元素在窗口内的绝对位置的重复问题。 - Elmo
1个回答

15

你不应该使用Canvas来实现这个功能。在Canvas中,对齐属性和边距对布局的元素没有影响。你应该使用Grid代替。对于大多数布局场景,Canvas并不是特别有用。

<Grid Height="42" HorizontalAlignment="Left" Margin="0,1,0,0" 
      Name="canvasPlayer1" VerticalAlignment="Top" Width="172" >
    <Label Content="" Foreground="White" FontSize="15" 
           FontFamily="Eurostile LT ExtendedTwo" 
           HorizontalAlignment="Center" Margin="0,5,0,0" 
           Name="labelPlayer1Name" VerticalAlignment="Center" />
</Grid>

我使用画布来选择需要居中的区域。我想我将不得不完全用行和列来排列我的网格,是吗?顺便说一句,谢谢你的回复! - user525192
2
如果不想创建行和列(虽然这样做会使布局更清晰),实际上并不需要。您可以在1x1网格内使用边距和对齐属性。这实际上是Visual Studio和Blend中WPF设计工具的默认设置。 - Josh
很多时候,以下这句话可以描述我的WPF编程体验:“孩子,你认为你需要一个Canvas,但实际上你不需要(你只是还不知道)...” 这确实令人恼火(特别是在混合使用Canvas和ViewBox时,有点像“布局短路”)... - heltonbiker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接