2013-07-30 2 views
0

Я хочу разрешить пользователю изменить свойство Window ResizeMode, заданное по умолчанию в моем случае ResizeMode="CanMinimize". Как его можно переключить на ResizeMode="CanResize"?Window ResizeMode привязывается к настройкам

Я думаю, что это можно сделать, создав логическое (или свойство CheckBox.IsChecked), связанное с ResizeMode с конвертером, но я не уверен, что так оно и есть. Даже если это был правильный вариант, я не знаю, как создать конвертер, который преобразует «True» в «CanResize» и «False» на «CanMinimize».

ответ

2

Я предпочитаю Триггер Раствор

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

Идея велика, но у меня нет установите флажок в том же окне, но в меню «Параметры». Я попытаюсь использовать конвертер. Спасибо – Sturm

+0

Вы можете привязать ко всему. Для меня дело в том, что проще и понятнее читать и кодировать, чем с конвертером. – LPL

+0

Жаль, что я был слишком слеп, чтобы увидеть его, работал очень хорошо. Большое спасибо. – Sturm

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 вы получаете свое требуемое поведение. Вы можете установить свойство в своей виртуальной машине при запуске после прочтения локальных настроек или изменить его во время выполнения, и все должно быть хорошо.

+0

Спасибо за помощь, очень ценятся, но у меня есть странная ошибка после его реализации: «Обеспечить значение на„System.Windows.StaticResourceExtension“бросил исключение. Номер линии «7» и позиция линии «101». В этой строке я установил привязку ResizeMode и конвертера. – Sturm

+0

@Sturm Какая ошибка? – Viv

+0

Извините, я нажал «Ввод», и комментарий был добавлен. Может быть, это инициализация собственности? Но у меня не было проблем с другими настройками, которые я связал. Я использую этот синтаксис: ResizeMode = "{Binding Source = {x: Static local: MySettings.Default}, Path = resize, Converter = {StaticResource ResizeModeConverter}}"> – Sturm

Смежные вопросы