我已经申请到一个按钮(默认启用)以下样式:WPF造型工作不正常
<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。
当我编写风格时,第二种风格似乎更有意义,因为默认情况下应该禁用按钮,直到对关联表进行更改并且需要保存更改。
有人可以解释为什么第二个不会按预期工作?
编辑
下面是使用这种风格的按钮的代码:
<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事件?我认为它是一个布尔值而不是字符串。 – 2014-09-12 14:50:53
FoxProTableIsDirty是虚拟机上的布尔属性(在启动时设置为False),并且它确实正确地触发了INotifyPropertyChanged事件。 – BrianKE 2014-09-12 15:38:45
我发现问题来自于BasedOn风格。显然MultiDataTriggers没有被重写,但是累积了,BasedOn样式有一个MultiDataTrigger,它将该按钮设置为启用。 – BrianKE 2014-09-17 13:29:27