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

标签 wpf resize binding sizetocontent css

我正在尝试根据其初始高度(当 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/

相关文章:

WPF 交互在样式中触发以调用 View 模型上的命令

wpf - 最佳实践 : Create custom control or implement using behaviors?

c# - WPF:验证与转换器

jquery - 当 iframe 中打开新页面时,如何让 jQuery colorbox 调整大小?

c# - 使用 MVVM 在运行时绑定(bind)失败

WPF Treeview数据绑定(bind)混合类型的分层数据

c# - WPF 在单独的 UI 线程上加载动画? (C#)

python - Tkinter 多帧调整大小

iphone - 我的 UITableViewCell 中的 UIImageView 在单击时更改大小

binding - 无法在 Screen 的 C-A Esc 模式下将 HJKL 绑定(bind)到 DLTH