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

时间:2015-12-29 20:46:17

标签: c# wpf

我有一个带有两个MultiBindings的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进行捏造(尽管我可能没有意识到更好的方法......)
感谢您的任何见解 -

2 个答案:

答案 0 :(得分:0)

在UserControl中公开依赖属性,并在MultiBinding中绑定它。然后,UserControl的每个实例都可以将绑定分配给特定属性,从而更新multiBinding。
就继承而言,只要允许这样做,就可以继承属性的价值。 x:名称无法继承。

答案 1 :(得分:0)

自从我接触WPF以来已经有一段时间了,您不能使用相对来源吗? 见下文。 How do I use WPF bindings with RelativeSource?