wpf canvas wpf-positioning

wpf splitter



Cómo centrar un elemento en wpf canvas (4)

Algo como esto.

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

¿Cómo puedo centrar un elemento en el lienzo de wpf usando propiedades adjuntas?


La única forma que conozco para hacer esto es averiguar el tamaño del lienzo y luego establecer las propiedades basadas en eso. Esto se puede hacer usando un controlador de eventos para SizeChanged en el lienzo:

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); }


Me encontré con esta publicación, porque estaba buscando una forma de centrar un elemento dentro de un Lienzo en XAML solo, en lugar de usar Propiedades adjuntas.

Por si acaso, viniste por la misma razón:

<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>


Puede colocar el lienzo y el elemento que desea centrar dentro de una cuadrícula:

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