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"的转换器。

Window ResizeMode bind to Settings

我更喜欢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中设置该属性,或者在运行时对其进行修改,一切都应该正常。