Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF样式未按预期工作_C#_Wpf_Datatrigger - Fatal编程技术网

C# WPF样式未按预期工作

C# WPF样式未按预期工作,c#,wpf,datatrigger,C#,Wpf,Datatrigger,我已将以下样式应用于按钮(默认情况下启用): 当FoxProTableIsDirty为False时,此选项用于禁用按钮 我最初将此连接如下(默认情况下禁用): 但是当FoxProTableIsDirty为False时,第二种方法无法禁用按钮 在我编写样式时,第二种样式似乎更有意义,因为默认情况下,按钮应该被禁用,直到对关联的表进行更改并且需要保存更改 有人能解释为什么第二个不能像预期的那样工作吗 编辑 以下是使用此样式的按钮的代码: <Button Name="CancelFoxp

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


当FoxProTableIsDirty为False时,此选项用于禁用按钮

我最初将此连接如下(默认情况下禁用):


但是当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>

检查
按钮
元素中是否设置了
IsEnabled

如果将其设置为触发器不能覆盖本地或内联值,则删除


换句话说,您可以直接将FoxProTableIsDirty绑定到按钮的IsEnabled,例如

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

或者通过样式设置器

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


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

WPF乍一看是正确的。因此,问题可能在于FoxProTableIsDirty属性本身的实现,而不是WPF。FoxProTableIsDirty是一个依赖属性,还是激发INotifyPropertyChanged事件?我假设它是一个布尔值而不是字符串。FoxProTableIsDirty是VM上的一个布尔属性(启动时设置为False),它确实正确地触发了INotifyPropertyChanged事件。我发现问题来自BasedOn样式。显然,MultiDataTrigger不会被覆盖,而是累积的,并且BasedOn样式具有一个MultiDataTrigger,该MultiDataTrigger将按钮设置为enabled。IsEnabled不会在按钮标记中被覆盖(请参见编辑)。我同意按照建议的方式移动它会更好,但我想了解为什么它不能像我最初设置的那样工作。@BrianKE,您的代码看起来是正确的。为了进一步分析,您是否可以发布一个可以重现您所面临问题的应用程序工作示例?
<Button IsEnabled="{Binding FoxProTableIsDirty}" />
<Setter Property="IsEnabled" Value="{Binding FoxProTableIsDirty}" />