如何在wpf画布中居中元素

时间:2010-02-05 17:16:54

标签: wpf canvas wpf-positioning

如何使用附加属性将元素置于wpf画布中心?

4 个答案:

答案 0 :(得分:34)

我遇到过这篇文章,因为我正在寻找一种方法,只在XAML中的Canvas中居中元素,而不是使用附加属性。

以防万一,你出于同样的原因:

<Canvas x:Name="myCanvas">
    <Grid Width="{Binding ActualWidth, ElementName=myCanvas}" 
          Height="{Binding ActualHeight, ElementName=myCanvas}">
        <Label Content="Hello World!"
               HorizontalAlignment="Center"
               VerticalAlignment="Center" 
        />
    </Grid>
</Canvas>

答案 1 :(得分:17)

像这样。

double left = (Canvas.ActualWidth - element.ActualWidth) / 2;
Canvas.SetLeft(element, left);

double top  = (Canvas.ActualHeight - element.ActualHeight) / 2;
Canvas.SetTop(element, top);

答案 2 :(得分:8)

我知道这样做的唯一方法是弄清楚画布的大小,然后根据它设置属性。这可以使用画布上的SizeChanged的事件处理程序来完成:

parentCanvas.SizeChanged += new SizeChangedEventHandler(parentCanvas_SizeChanged);

void parentCanvas_SizeChanged(object sender, SizeChangedEventArgs e)
{
    parentCanvas.SetLeft(uiElement, (parentCanvas.ActualWidth - uiElement.ActualWidth) / 2);
    parentCanvas.SetTop(uiElement, (parentCanvas.ActualHeight - uiElement.ActualHeight) / 2);
}

答案 3 :(得分:2)

您可以将Canvas和您想要居中的元素放在网格中:

<Grid>
    <Canvas Width="200" Height="200" Background="Black" />
    <Button Width="50" Height="20" > Hello
    </Button>
</Grid>