Как центрировать элемент в холсте wpf - PullRequest
23 голосов
/ 05 февраля 2010

Как я могу центрировать элемент в холсте wpf, используя вложенные свойства?

Ответы [ 4 ]

35 голосов
/ 09 марта 2016

Я наткнулся на этот пост, потому что я искал способ центрировать элемент внутри Canvas только в XAML вместо использования Attached Properties.

На всякий случай вы пришли по той же причине:

<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>
17 голосов
/ 05 февраля 2010

Как то так.

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

double top  = (Canvas.ActualHeight - element.ActualHeight) / 2;
Canvas.SetTop(element, top);
8 голосов
/ 05 февраля 2010

Единственный способ, которым я знаю, - это определить размер холста, а затем установить свойства на основе этого. Это можно сделать с помощью обработчика события для 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);
}
2 голосов
/ 22 ноября 2013

Вы можете поместить Canvas и элемент, который вы хотите центрировать внутри сетки:

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