Попытка добавить триггер к кнопке, чтобы изменить свойство Content кнопки - PullRequest
4 голосов
/ 20 марта 2012

У меня есть UserControl, на котором есть кнопка. UserControl имеет свойство DependencyProperty с именем IsNew. Это значение bool, которое устанавливается в true, если редактируемый объект в элементе управления был недавно создан и еще не записан в базу данных. В противном случае это ложь.

У меня есть кнопка с надписью «Сохранить». Меня попросили изменить кнопку, чтобы она показала «Вставить», если строка новая. Теперь у меня есть XAML ниже для кнопки:

<Button Background="{DynamicResource ButtonBackground}" 
        Click="SaveButton_Click" 
        Content="Save" 
        FontSize="20" 
        FontWeight="Bold" 
        Foreground="{DynamicResource ButtonForeground}" 
        Height="60"
        IsEnabled="{Binding Path=IsDirty, RelativeSource={RelativeSource AncestorType={x:Type cs:Editor}}}"
        Margin="5"
        Name="SaveButton" 
        TabIndex="7"
        Visibility="{Binding Path=CanModify, Converter={StaticResource BoolToVisibility}}">
    <Button.Triggers>
        <Trigger Property="Editor.IsNew" Value="True">
            <Setter Property="Button.Content" Value="Insert" />
        </Trigger>
        <Trigger Property="Editor.IsNew>
            <Setter Property="Button.Content" Value="Save" />
        </Trigger>
    </Button.Triggers>
</Button>

Я получаю исключение во время выполнения, внутреннее исключение которого гласит:

Triggers collection members must be of type EventTrigger.

Как мне заставить это работать? Я мог бы легко сделать это в коде, но я хочу сделать это в XAML.

Спасибо

Tony

Ответы [ 2 ]

11 голосов
/ 20 марта 2012

Вы можете использовать только EventTriggers в Control.Triggers.Чтобы использовать другой тип триггера (Trigger, DataTrigger), вы должны использовать стиль:

<Button.Style>
  <Style TargetType="Button">
    <Style.Triggers>
      <Trigger Property="Editor.IsNew" Value="True">
        <Setter Property="Button.Content" Value="Insert" />
      </Trigger>

А также ваши Property="Editor.IsNew" и Property="Button.Content" не будут работать, потому что триггеры принадлежат кнопке, а триггер попытается найтисвойство "Editor.IsNew" на кнопку.Вы можете исправить это, изменив триггер на DataTrigger и связав с RelativeSource свой UserControl и его свойство IsNew.И Property="Button.Content "необходимо изменить на Property="Content".

0 голосов
/ 20 марта 2012

Причина в том, что элемент управления может реализовывать только EventTriggers. Другие виды триггеров, которые вам нужны, должны быть реализованы в стиле, и тогда ваша кнопка использует этот стиль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...