WPF在用户控件中注入或继承名称

本文关键字:继承 注入 用户 控件 WPF | 更新日期: 2023-09-27 18:28:34

我有一个带有两个MultiBinding的TextBlock。我想从中创建一个用户控件,因为我需要几个实例。实例之间唯一的区别是Name,它只需要作为MultiBinding的一种参数。

<TextBlock x:Name="That"><
  TextBlock.Foreground>
    <MultiBinding Converter="{StaticResource multiValueFgColorConverter}">
        <Binding ElementName="That" Path="Name" />
        <Binding Path="TimerState" Mode="TwoWay" />
        <Binding Path="Which" Mode="TwoWay" />
    </MultiBinding>
</TextBlock.Foreground><TextBlock.Opacity>
    <MultiBinding Converter="{StaticResource multiValueOpacityConverter}">
        <Binding ElementName="That" Path="Name" />
        <Binding Path="TimerState" Mode="TwoWay" />
        <Binding Path="Which" Mode="TwoWay" />
    </MultiBinding>
</TextBlock.Opacity><Bold><Run Text="That"/></Bold>

--有没有办法将Name注入到用户控件的实例中
--或者,也许将此用户控件包装在使用它的另一个控件中,并让UC继承父控件的名称?

<grid x:Name="That">
    <my:UC/>  <!-- 'Inherits' "That"? -->
</grid>   

--或者,是否有方法将字符串作为参数传递给MultiBinding?据我所知,MultiBinding不采用ConverterParameters,所以它必须通过Binding进行伪造(尽管我可能不知道更好的方法…)
感谢您的任何见解——

WPF在用户控件中注入或继承名称

在UserControl中公开依赖属性,并在MultiBinding中绑定到它。然后,UserControl的每个实例都可以将绑定分配给特定的属性,从而更新MultiBinding
就继承而言,只要允许,您就可以继承property的值。x:Name不能被继承。

我接触WPF已经有一段时间了,你不能使用相对源吗?请参见下文。如何将WPF绑定与RelativeSource一起使用?