Window ResizeMode绑定到Settings

时间:2013-07-30 12:40:40

标签: c# wpf window

我想允许用户更改Window ResizeMode属性,在我的情况下默认设置为ResizeMode="CanMinimize"。如何切换到ResizeMode="CanResize"

我认为可以通过使用转换器创建绑定到CheckBox.IsChecked的布尔(或ResizeMode属性)来完成,但我不确定这是不是这样的。即使这是正确的选择,我也不知道如何创建转换器来转换" True"到" CanResize"和" False"到" CanMinimize"。

2 个答案:

答案 0 :(得分:3)

我更喜欢触发解决方案

<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>

答案 1 :(得分:1)

创建转换器非常简单。

有类似的东西:

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中设置属性,或在运行时修改它,一切都应该没问题。