Come posso centrare un elemento nella tela wpf utilizzando le proprietà associate?Come centrare un elemento nella tela wpf
risposta
Qualcosa di simile.
double left = (Canvas.ActualWidth - element.ActualWidth)/2;
Canvas.SetLeft(element, left);
double top = (Canvas.ActualHeight - element.ActualHeight)/2;
Canvas.SetTop(element, top);
L'unico modo che conosco per fare questo è quello di capire la dimensione della tela, e quindi impostare le proprietà basate questa. Questo può essere fatto utilizzando un gestore di eventi per SizeChanged
sulla tela:
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);
}
questo evento si accenderà al caricamento della finestra. –
Dovrebbe, sì. Verrà attivato ogni volta che vengono modificate le proprietà ActualWidth/ActualHeight della tela. (Ad esempio durante l'aggiornamento del layout) – Robin
Grande. Ma credo che dovrebbe essere Canvas.SetLeft e Canvas.SetTop; non l'istanza della tela genitore. –
si può mettere la tela e l'elemento che si desidera essere centrato all'interno di una griglia:
<Grid>
<Canvas Width="200" Height="200" Background="Black" />
<Button Width="50" Height="20" > Hello
</Button>
</Grid>
mi sono imbattuto in questo post , perché stavo cercando un modo per centrare un elemento all'interno di una tela in XAML, invece di usare Proprietà allegate.
Solo nel caso, si è venuto per lo stesso motivo:
<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>
Fantastico! Funziona "così com'è", senza codice dietro. L'ho usato per centrare un UserControl, nel posto dell'etichetta. –
Ora c'è una griglia lenta dentro. Una soluzione senza una griglia sarebbe bella. –
può questo essere scritto all'interno di una classe che eredita una classe tela come proprietà associata. –