You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当MarkupExtension的TargetObject为Binding时,如何识别对应的FrameworkElement?

WPF MarkupExtension 作为Binding Converter时获取父级FrameworkElement的问题

我有一个MarkupExtension的实用场景:它作为IValueConverter的服务扩展,接收int类型的Counter值,并将其映射为L10N格式化的本地化内容。目前转换功能正常,但希望优化本地化域名的获取方式。

现有手动指定方式(繁琐)

可以给MarkupExtension添加DomainName属性手动指定,但这种方式操作起来比较繁琐:

<TextBlock Text="{Binding Path=Counter, Converter={wpf:GettextFormatConverter Binding string format support: {0:n0}}, DomainName=Example}" HorizontalAlignment="Center" />

理想的自动识别方式

更合理的方案是从父级LocalizationContent容器中自动识别DomainName:

<LocalizationContent DomainName="Example">
    <TextBlock Text="{Binding Path=Counter, Converter={wpf:GettextFormatConverter Binding string format support: {0:n0}}}" HorizontalAlignment="Center" />
</LocalizationContent>

直接绑定控件属性时可正常实现

当MarkupExtension直接绑定到控件的Text或Content属性时,这种自动识别逻辑很容易实现:

<LocalizationContent DomainName="Example">
    <TextBlock Text="{wpf:Gettext Varying case example:}" HorizontalAlignment="Center" />
</LocalizationContent>

此时TargetObject是DependencyObject,TargetProperty是DependencyProperty,能方便地向上查找父级FrameworkElement。

核心问题

但当MarkupExtension作为Binding的Converter使用时,TargetObject是Binding而非父级TextBlock这类FrameworkElement。现在需要解决的是:在ProvideValue上下文环境中,不借助XAML服务提供者,如何识别对应的TextBlock(FrameworkElement)实例?

补充说明:我只需要获取TextBlock(FrameworkElement)实例,完全不在意Binding或MultiBinding本身,当前的问题是暴露的TargetObject是Binding而非DependencyObject。

当前MarkupExtension实现代码

// Implementing the MarkupExtension, in service to a (Multi)Binding converter
public override object ProvideValue(IServiceProvider serviceProvider)
{
    // Convenience GetService extension method
    var valueProvider = serviceProvider.GetService<IProvideValueTarget>();

    // TODO: never happens, since TargetObject was a (Multi)Binding
    if (valueProvider.TargetObject is DependencyObject dependencyObject)
    {
        // TODO: do something interesting with the DO
    }

    return Gettext(Localizer);
}

内容的提问来源于stack exchange,提问作者Michael W. Powell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:12:45