Silverlight:TargetType的多个值?

时间:2010-12-09 02:38:51

标签: .net silverlight xaml targettype

我可以在Silverlight 4中定义一个样式:

    <Style x:Name="Subtitle" TargetType="TextBlock">
        <Setter Property="Foreground" Value="#787878" />
        <Setter Property="FontWeight" Value="Light" />
     </Style>

但是,我也希望将这些属性应用于Run。我可以为TargetType设置多个值,还是以某种方式将这些样式传播到树下?

2 个答案:

答案 0 :(得分:4)

通常,您可以创建一个以公共基类为目标的样式,然后创建从基本样式派生的空样式以定位特定类。但是,在TextBlock和Run的情况下,它们不共享公共基类,事实上,由于Run不是从FrameworkElement派生的,因此它甚至没有Style属性。

但是,如果你问Run是否会继承其父TextBlock的前景/字体属性,那么它会是。但是,您将无法将此样式应用于Run,而与其包含的TextBlock无关。

另一种选择是为您的前景画笔和字体重量创建静态资源,如下所示:

<Grid
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Grid.Resources>
  <FontWeight x:Key="SubtitleFontWeight">Light</FontWeight>
  <SolidColorBrush x:Key="SubtitleForeground" Color="#787878" />
</Grid.Resources>

  <TextBlock>
    <Run Text="Hello " />
    <Run Text="World!" 
         Foreground="{StaticResource SubtitleForeground}"
         FontWeight="{StaticResource SubtitleFontWeight}" />
  </TextBlock>

</Grid>

答案 1 :(得分:0)

Nope ..一个Style - 一个TargetType ......