WPF样式未按预期工作

时间:2014-09-12 14:36:52

标签: c# wpf datatrigger

我将以下样式应用于Button(默认情况下启用):

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

1 个答案:

答案 0 :(得分:1)

检查IsEnabled元素中是否设置了Button

如果设置为

,则删除触发器无法覆盖本地或内联值。

&lt; Button Style =“{StaticResource DisableFoxProCancelButton}” IsEnabled =“False” /&gt;


以其他方式你可以直接将FoxProTableIsDirty绑定到Button的IsEnabled,例如

<Button IsEnabled="{Binding FoxProTableIsDirty}" />

或通过样式设定者

<Setter Property="IsEnabled" Value="{Binding FoxProTableIsDirty}" />

只要FoxProTableIsDirty正在解决并通知更改,这将根据需要启用/禁用按钮