Это не то, что встроено в WPF, поэтому вам придется написать собственный код для его обработки. SizeToContent работает до тех пор, пока конечный пользователь не изменит размер окна, тогда размер окна будет фиксированным.
Вы можете использовать что-то подобное для достижения желаемого:
public partial class MainWindow {
public MainWindow() {
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e) {
base.OnSourceInitialized(e);
IntPtr handle = new WindowInteropHelper(this).Handle;
HwndSource.FromHwnd(handle).AddHook(new HwndSourceHook(this.WindowProc));
}
private const int WM_SIZING = 0x0214;
private const int WM_EXITSIZEMOVE = 0x0232;
private IntPtr WindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) {
switch (msg) {
case WM_SIZING:
this.firstColumn.ClearValue(ColumnDefinition.MinWidthProperty);
break;
case WM_EXITSIZEMOVE:
this.firstColumn.MinWidth = this.firstColumn.ActualWidth;
this.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
break;
}
return IntPtr.Zero;
}
}
Тогда вам нужно дать вашему первому ColumnDefinition имя "firstColumn", например так:
<ColumnDefinition x:Name="firstColumn" Width="*" />
Так эффективно, он использует SizeToContent, как у вас. Если вы измените размер окна, он гарантирует, что минимальный размер первого столбца сохранит размер фиксированным, и снова включит SizeToContent.
EDIT:
Заметил, что вы использовали тег VB.NET, поэтому вот версия VB.NET:
Public Partial Class MainWindow
Public Sub New()
InitializeComponent()
End Sub
Protected Overrides Sub OnSourceInitialized(e As EventArgs)
MyBase.OnSourceInitialized(e)
Dim handle As IntPtr = New WindowInteropHelper(Me).Handle
HwndSource.FromHwnd(handle).AddHook(New HwndSourceHook(AddressOf Me.WindowProc))
End Sub
Private Const WM_SIZING As Integer = &H214
Private Const WM_EXITSIZEMOVE As Integer = &H232
Private Function WindowProc(hwnd As IntPtr, msg As Integer, wParam As IntPtr, lParam As IntPtr, ByRef handled As Boolean) As IntPtr
Select Case msg
Case WM_SIZING
Me.firstColumn.ClearValue(ColumnDefinition.MinWidthProperty)
Exit Select
Case WM_EXITSIZEMOVE
Me.firstColumn.MinWidth = Me.firstColumn.ActualWidth
Me.SizeToContent = System.Windows.SizeToContent.WidthAndHeight
Exit Select
End Select
Return IntPtr.Zero
End Function
End Class