Window ResizeMode bind to Settings
本文关键字:Settings to bind ResizeMode Window | 更新日期: 2023-09-27 18:25:40
我想允许用户更改Window ResizeMode
属性,在我的情况下默认设置为ResizeMode="CanMinimize"
。如何切换到ResizeMode="CanResize"
?
我认为可以通过创建一个与ResizeMode
绑定的布尔值(或CheckBox.IsChecked
属性)和一个转换器来完成,但我不确定是否是这样。即使这是正确的选择,我也不知道如何创建一个将"True
"转换为"CanResize
"、将"False
"转换为"CanMinimize
"的转换器。
我更喜欢Trigger解决方案
<Window>
<CheckBox Name="checkbox" Content="CanResize" />
<Window.Style>
<Style TargetType="Window">
<Setter Property="ResizeMode" Value="CanMinimize" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=checkbox}" Value="True">
<Setter Property="ResizeMode" Value="CanResize" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Style>
</Window>
创建一个转换器非常简单。
有这样的东西:
using System.Globalization;
using System.Windows;
using System.Windows.Data;
public class ResizeModeConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return (bool)value ? ResizeMode.CanResize : ResizeMode.CanMinimize;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
并将此转换器添加到App.xaml资源中(转换器应该在Window
可用的范围内)
<Application.Resources>
<local:ResizeModeConverter x:Key="ResizeModeConverter" />
</Application.Resources>
现在在您的Window
中
<Window ... ResizeMode="{Binding SomeProperty, Converter={StaticResource ResizeModeConverter}}">
现在,当SomeProperty
设置为true或false时,您将获得所需的行为。在读取本地设置后,您可以在启动时在VM中设置该属性,或者在运行时对其进行修改,一切都应该正常。