Silverlight:如何在setter中为样式使用绑定(或等效的解决方法)

Joe*_*ool 14 data-binding silverlight xaml styles

如果回答此问题的人是正确的,则不能将绑定作为Silverlight中样式的setter中的值.这是一种耻辱,因为我有4个文本块,它们都使用完全相同的绑定作为其Opacity属性.反正在某种意义上"风格"他们的Opacity属性是否所有四个都指向相同的绑定?否则,我必须单独设置每个Opacity属性.在我的情况下,它更糟糕 - 所有四个共享其他属性绑定,这意味着每个TextBlock声明相当长,但它们几乎都是相同的(它们的属性绑定,即).我知道我可以在代码隐藏中简明地设置所有共享属性绑定,但是如果有的话,我想要一个XAML解决方案.

谢谢!

Ant*_*nes 11

这是它的完成方式.您使用a ContentControl并将其指定ControlTemplate为静态资源: -

<Grid.Resources>
    <ControlTemplate x:Key="CommonTextBlock" TargetType="ContentControl">
        <TextBlock Opacity="{Binding SomeOpacity}" Text="{TemplateBinding Content}" />
    </ControlTemplate>
<Grid.Resource>
<ContentControl Content="{Binding SomeTextValue}" Template="{StaticResource CommonTextBlock}" />
<ContentControl Content="{Binding SomeOtherTextValue}" Template="{StaticResource CommonTextBlock}" />
Run Code Online (Sandbox Code Playgroud)

现在,您可以根据需要将其绑定到控件模板中的其他属性.

这种方法可以扩展到Style: -

<Grid.Resources>
    <ControlTemplate x:Key="CommonTextBlock" TargetType="ContentControl">
        <TextBlock Opacity="{Binding SomeOpacity}" Text="{TemplateBinding Content}" />
    </ControlTemplate>
    <Style x:Key="CommonTextBlockStyle" TargetType="ContentControl">
       <Setter Property="Template" Value="{StaticResource CommonTextBlock}" />
       <Setter Property="Foreground" Value="Blue" />
    </Style>
<Grid.Resource>
<ContentControl Content="{Binding SomeTextValue}" Style="{StaticResource CommonTextBlockStyle}" />
<ContentControl Content="{Binding SomeOtherTextValue}" Style="{StaticResource CommonTextBlockStyle}" />
Run Code Online (Sandbox Code Playgroud)