如果回答的人this question是的,您不能将绑定(bind)作为值放在 Silverlight 中的样式中的 setter 中。真可惜,因为我有 4 个文本 block ,它们都对它们的不透明度属性使用完全相同的绑定(bind)。无论如何在某种意义上“设计”他们的 Opacity 属性,以便他们四个都指向同一个绑定(bind)?否则,我必须单独设置每个 Opacity 属性。就我而言,情况更糟——所有四个都共享其他属性绑定(bind),这意味着每个 TextBlock 声明都非常长,但它们实际上都是相同的(即它们的属性绑定(bind))。我知道我可以在代码隐藏中简洁地设置他们所有的共享属性绑定(bind),但如果有的话,我想要一个 XAML 解决方案。
谢谢!
最佳答案
这是它的完成方式。您使用 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}" />
现在,您可以根据需要将其他属性绑定(bind)到控制模板中。
这种方法可以扩展到
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}" />
关于Silverlight:如何在 setter 中为样式使用绑定(bind)(或等效的解决方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4878189/