【问题标题】:WPF After a data trigger is in use (sealed), it cannot be modifiedWPF 数据触发器在使用(密封)后,无法修改
【发布时间】:2018-11-21 08:42:00
【问题描述】:

我不知道出了什么问题,以及我应该如何解决错误。奇怪的是,数据触发器工作正常。

    <Style TargetType="Border">
        <Setter Property="Background" Value="{StaticResource HeaderBackgroundBrush}"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding State}" Value="{StaticResource ErrorState}">
                <Setter Property="Background" Value="OrangeRed"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding State}" Value="{StaticResource ProductionState}">
                <Setter Property="Background" Value="Green"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

ProductionState 和错误状态是 XAML 中引用的枚举值:

    <machineControl:MachineControllerState x:Key="ErrorState">Error</machineControl:MachineControllerState>
    <machineControl:MachineControllerState x:Key="ProductionState">Production</machineControl:MachineControllerState>

对视图模型的状态绑定引用是支持 IPropertyChanged 的​​“普通”属性(来自 mvvm 灯库)

    public MachineControllerState State
    {
        get => state;
        set { Set(() => State, ref state, value); }
    }

visual studio 在错误列表中显示错误:

数据触发器在使用(密封)后,无法修改

更新:明确地说,解决方案编译良好,运行时一切正常。

【问题讨论】:

  • 是VS2013吗?
  • 抱歉。 vs2017最新更新
  • 那么不应该是这样。尝试清理并重建整个解决方案。正如其他人所说,这对他们有用 - 清除错误。
  • 措辞不是很有帮助,我觉得“承诺”比“密封”更有帮助。但是从根本上讲,xaml 不能与您编写的代码很好地交互。似乎它想修补触发器。我们看不到代码。暂时注释掉东西可能是一种很好的定位方式。
  • @KevinKouketsu {x:Static machineControl:MachineControllerState.Production} 是修复。谢谢!这样看起来更好看,没有错误:)。放弃它作为答案,我会接受它

标签: c# wpf visual-studio-2017


【解决方案1】:

您可以直接从代码隐藏中引用您的枚举。比如:

{x:Static namespacename:EnumName.EnumValue}

参考: How can I use enum types in XAML?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多