我正在尝试根据其初始高度(当 SizeToContent="WidthAndHeight")设置可调整大小窗口的 MinHeight/MinWidth。
我看到了几个答案/解决方案:
http://weblogs.asp.net/psheriff/archive/2010/01.aspx
Set form MinWidth and MinHeight based on child property
但是:
我正在尝试使用 MVVM 模式 并希望能够实现 这在 xaml 中。
我也想保持值(value)观 比如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
,以便 WPF 可以在 时更新
在调整窗口大小时发生变化。如果可行,那么您会很高兴。MinHeight
>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;
}
}
希望它能解决您的问题。或者至少会给你一些关于如何进行的想法。如果您想固定窗口的大小,那么您还可以在 Window_SizeChanged()
处理程序中设置 MaxHeight
。
仅 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>
关于WPF - 尝试根据其初始高度设置可调整大小窗口的 MinHeight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4614319/