Trascorro un bel po 'di tempo per capire anche tutta la storia. È sorprendentemente difficile trovare una risposta XAML pura (zero-code dietro) a questa domanda in rete, quindi ecco la mia.
Quando progettiamo una finestra in Visual Studio WPF progettista, lo standard (e per impostazione predefinita) modo è quello di definire Width
e Height
proprietà sul Window
, come questo in XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="75" Width="190">
<Grid>
<Button Content="Right" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="75" />
<Button Content="Left" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="75"/>
</Grid>
</Window>
Il progettista anteprima si presenta così:

tutto sembra fresco, ma quando si corre l'applicazione, a seconda della versione corrente di Windows, a tema e tutti di impostazioni di splay jazz, ci sono 99% di probabilità che la finestra di runtime sia non come quella progettata. Ecco come si presenta sul mio Windows 8.1:

La soluzione iniziale è, come nella risposta di Oren per utilizzare la proprietà SizeTocontent
. Fondamentalmente dice a WPF di definire la dimensione della finestra dal suo contenuto (ovvero "dimensione del client"), invece della finestra stessa (ovvero "dimensione del client + tutto ciò che non è client/chrome/border roba totalmente incontrollabile").
Quindi, siamo in grado di definire il contenuto di essere di dimensione fissa, in questo modo:
<Window x:Class="WpfApplication1.MainWindowSizeToContentCentered"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight">
<Grid Height="40" Width="180">
<Button Content="Right" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="75" />
<Button Content="Left" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="75"/>
</Grid>
</Window>
E ora, la finestra di esecuzione appare esattamente come vogliamo (Nota altezza e la larghezza della griglia non hanno esattamente gli stessi valori della finestra originale - 40/180 vs 75/190 -, e va bene, come nella modalità di progettazione, è ora possibile solo dimenticare finestra Altezza e proprietà Width sempre):

Come si comporta quando viene ridimensionata la finestra?in questo modo, la griglia è centrata, che va bene se si vuole che il comportamento:

Ma, se vogliamo che il comportamento in questione, ("Posso ridimensionare la finestra, ma il suo contenuto doesn' . t ridimensionare con esso, perché ho specificato una dimensione fissa "), che era il comportamento originale troppo, invece di specificare larghezza e l'altezza, possiamo usare MinWidth
e MinHeight
, in questo modo:
sguardi finestra
<Window x:Class="WpfApplication1.MainWindowSizeToContentResizable"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight">
<Grid MinHeight="40" MinWidth="180">
<Button Content="Right" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="75" />
<Button Content="Left" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="75"/>
</Grid>
</Window>
il runtime lo stesso, ma l'esperienza di ridimensionamento è ora paragonabile al layout della finestra di default originale:

Questo dovrebbe essere il default WPF designer layout IMHO.
Sono finalmente tornato a un progetto in cui avevo bisogno di questo, e la tua prima soluzione fa esattamente quello che voglio. Grazie! –
L'opzione B qui funziona perfettamente per me. Esattamente quello che stavo cercando. – samuelesque
L'opzione B apparentemente non funziona con Windows 7 (con tema aerodinamico di base). –