gpt4 book ai didi

WPF - 尝试根据其初始高度设置可调整大小窗口的 MinHeight

转载 作者:技术小花猫 更新时间:2023-10-29 11:09:13 27 4
gpt4 key购买 nike

我正在尝试根据其初始高度(当 SizeToContent="WidthAndHeight")设置可调整大小窗口的 MinHeight/MinWidth。

我看到了几个答案/解决方案:

http://weblogs.asp.net/psheriff/archive/2010/01.aspx

Set form MinWidth and MinHeight based on child property

但是:

  1. 我正在尝试使用 MVVM 模式并希望能够实现这在 xaml 中。

  2. 我也想保持值(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com