Wpf 在PriorityBinding中使用MarkupExtension

Wpf 在PriorityBinding中使用MarkupExtension,wpf,binding,Wpf,Binding,编辑:TL/DR 您可以在PriorityBinding中使用自定义标记扩展。它可能会突出显示一条错误消息,设计者可能不会在设计时显示它,但在运行时它会像一个符咒一样工作。似乎是XAML设计器或某些其他内部组件的问题 在我们的软件中,我有一些特定的场景,我需要显示一个翻译后的字符串,以防绑定返回null。在这里,我的产品编号只设置在某一点上,在此之前,我希望显示以用户语言翻译的“未知”。为此,我们使用了一个自定义标记,它返回一个到支持转换的中间对象的绑定 遗憾的是,MarkupExtension

编辑:TL/DR 您可以在
PriorityBinding
中使用自定义标记扩展。它可能会突出显示一条错误消息,设计者可能不会在设计时显示它,但在运行时它会像一个符咒一样工作。似乎是XAML设计器或某些其他内部组件的问题

在我们的软件中,我有一些特定的场景,我需要显示一个翻译后的字符串,以防绑定返回null。在这里,我的产品编号只设置在某一点上,在此之前,我希望显示以用户语言翻译的“未知”。为此,我们使用了一个自定义标记,它返回一个到支持转换的中间对象的绑定

遗憾的是,
MarkupExtension
BindingBase
继承,而不是相反。因此,由于
PriorityBinding
需要一个
BindingBase
集合,因此我无法将翻译标记添加为回退绑定

这就是我所尝试的:

<PriorityBinding>
    <Binding Path="ProductionNumber" />
    <l:Translate Key="Unknown" Context="Common" />
</PriorityBinding>


有人知道如何解决这个问题吗?使用
PriorityBinding
将是最简单的方法。当然,我可以使用转换器来实现这一点,但是我会消除标记中实现的一些基本功能,这些功能基本上使它变得无用。

为什么不能对
TargetNullValue
属性集使用自定义
Binding
实现呢?每次
TargetNullValue
创建时,我都需要提供一个值用过。因此,我必须重写它,因为当使用
new
实现时,基类不会使用它。因为整个绑定系统都被锁定了,所以我无法覆盖
绑定的任何逻辑。。。这样,我就得到了一个静态值,当我切换语言时,它不会改变。我不会跟随。您可以只设置自定义绑定的每个实例的
TargetNullValue
或任何其他属性,不是吗?不。我们的软件无需重新启动即可工作。如果我更改了语言,所有内容都会立即被翻译,这要归功于绑定。我不能只设置一次回退值,因为它类似于一次性绑定。此外,这个
TranslateMarkup
是否实现了遍历逻辑树以构建上下文层次结构的逻辑(XAML中的每个元素都可以有一个上下文附加属性,该属性在标记的
ProvideValue
方法中解析为完整的上下文路径)。那么,您的实际问题是什么?