我试图根据其初始高度(当 SizeToContent="WidthAndHeight")设置可调整大小窗口的 MinHeight/MinWidth。
我看到了几个答案/解决方案:
http://weblogs.asp.net/psheriff/archive/2010/01.aspx
Set form MinWidth and MinHeight based on child property
然而:
并希望能够实现
这在 xaml 中。
比如MinHeight出来的
ViewModel - 我不认为它们属于
在那里,因为他们绑了一个微不足道的部分
View 的行为
View 模型。这是我想留给 UX 设计师的东西。
我正在努力解决的一个解决方案是使用以下 xaml/绑定(bind):
<Window
....
x:Name="mainWindow"
SizeToContent="WidthAndHeight"
ResizeMode="CanResizeWithGrip"
MinHeight="{Binding ElementName=mainWindow, Mode=OneTime, Path=ActualHeight}"
>
我希望 'Mode=OneTime' 将 MinHeight 绑定(bind)到窗口高度的初始值。
但它不起作用..
有人可以解释为什么吗?是否有符合我标准的解决方案?
谢谢,
标记
最佳答案
您的代码:
<Window
....
x:Name="mainWindow"
SizeToContent="WidthAndHeight"
ResizeMode="CanResizeWithGrip"
MinHeight="{Binding ElementName=mainWindow, Mode=OneTime, Path=ActualHeight}"
>
这是行不通的,因为 ActualHeight
的默认值为零,而当 WPF 框架调整窗口大小时,它已经为 MinHeight
分配了 ActualHeight
的默认值,该值为零!您可以尝试的第一件事是:将
Mode=OneTime
更改为 Mode=Default
,以便当 MinHeight
在调整窗口大小时发生更改时,WPF 可以更新 ActualHeight
。如果这有效,那么你会很高兴。否则,您必须处理
SizeChanged
事件,并且可以在处理程序中更新MinHeight
。<Window
....
x:Name="mainWindow"
SizeToContent="WidthAndHeight"
ResizeMode="CanResizeWithGrip"
SizeChanged="Window_SizeChanged"
>
在代码隐藏中:bool firstTime= true;
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
if ( firstTime)
{
element.MinHeight = e.NewSize.Height;
firstTime= false;
}
}
希望它能解决你的问题。或至少会给您一些有关如何进行的想法。如果您想固定窗口的大小,那么您还可以在 MaxHeight
处理程序中设置 Window_SizeChanged()
。仅 XAML 解决方案
<Window
x:Name="mainWindow"
SizeToContent="WidthAndHeight"
ResizeMode="CanResizeWithGrip"
>
<Window.Triggers>
<EventTrigger RoutedEvent="SizeChanged">
<BeginStoryboard>
<Storyboard Storyboard.TargetName="mainWindow">
<DoubleAnimation Storyboard.TargetProperty="MinHeight"
To="{Binding ElementName=mainWindow, Path=ActualHeight}"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
<!---- other code goes here--->
</Window>