У меня есть следующий стиль, примененный к кнопке (по умолчанию включено):WPF Styling не работает должным образом
<Style x:Key="DisableFoxProCancelButton"
TargetType="{x:Type Button}"
BasedOn="{StaticResource ButtonStyle}">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=FoxProTableIsDirty}" Value="false">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
Это работает, чтобы отключить кнопку, когда FoxProTableIsDirty является значение False.
я первоначально имел это проводной следующим образом (по умолчанию отключено):
<Style x:Key="DisableFoxProCancelButton"
TargetType="{x:Type Button}"
BasedOn="{StaticResource ButtonStyle}">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=FoxProTableIsDirty}" Value="true">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
Но этот второй способ не работает, чтобы отключить кнопку, когда FoxProTableIsDirty является значение False.
Второй стиль, казалось, имел больше смысла, когда я писал стиль, поскольку по умолчанию кнопка должна быть отключена до тех пор, пока не будет внесено изменение в соответствующую таблицу, и изменения должны быть сохранены.
Может кто-нибудь объяснить, почему второй не будет работать так, как ожидалось?
EDIT
Вот код для кнопки, используя этот стиль:
<Button Name="CancelFoxproChanges"
Content="Cancel"
Style="{StaticResource DisableFoxProCancelButton}"
DockPanel.Dock="Right"
HorizontalAlignment="Right">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding}"
MethodName="FoxProCancelButtonClicked" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
WPF выглядит прямо на первый взгляд. Возможно, проблема связана с реализацией самого свойства FoxProTableIsDirty, а не с WPF. Является ли свойство FoxProTableIsDirty зависимым, или оно запускает события INotifyPropertyChanged? Я предполагаю, что это булевская строка. –
FoxProTableIsDirty - это логическое свойство (установлено в False при запуске) на виртуальной машине и оно корректно запускает событие INotifyPropertyChanged. – BrianKE
Я обнаружил, что проблема исходила из стиля BasedOn. По-видимому, MultiDataTriggers не переоцениваются, но кумулятивны, а стиль BasedOn имеет MultiDataTrigger, который настраивал кнопку для включения. – BrianKE