我正在尝试根据其初始高度设置可调整大小窗口的MinHeight / MinWidth(当SizeToContent =“WidthAndHeight”时)。
我见过几个答案/解决方案:
http://weblogs.asp.net/psheriff/archive/2010/01.aspx
Set form MinWidth and MinHeight based on child property
然而:
我正在尝试使用MVVM模式 并希望能够实现 这在xaml。
我还想保留价值观 比如MinHeight出了 ViewModel - 我不认为他们属于 在那里,他们绑在一个微不足道的部分 视图的行为 视图模型。我想留给UX设计师。
我正在努力解决的一个问题是使用以下xaml / binding:
<Window
....
x:Name="mainWindow"
SizeToContent="WidthAndHeight"
ResizeMode="CanResizeWithGrip"
MinHeight="{Binding ElementName=mainWindow, Mode=OneTime, Path=ActualHeight}"
>
我希望'Mode = OneTime'将MinHeight绑定到窗口高度的初始值。
但它不起作用..
有人可以解释一下原因吗?有没有符合我标准的解决方案?
谢谢,
标记
答案 0 :(得分:10)
您的代码:
<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()
。
<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>
答案 1 :(得分:0)
我怀疑你正在寻找这段代码:
<Window
x:Name="myWindow"
MinHeight="266" Height="{Binding ElementName=myWindow, Path=MinHeight}"
MinWidth="480" Width="{Binding ElementName=myWindow, Path=MinWidth}">
这会将“高度”和“宽度”设置为“MinHeight”和“MinWidth”设置。所以你只有一个职位可以改变。