2011-11-29 51 views
4

我有一些StackPanels我希望有相同的宽度。但是,这不应该影响所有的StackPanels,我不想为此而子类化。我知道,可能有如下优点:什么是WPF中HTML类ID的等价物?

<Style BasedOn="{StaticResource {x:Type TextBlock}}" 
    TargetType="TextBlock" 
    x:Key="TitleText"> 
     <Setter Property="FontSize" Value="26"/> 
</Style> 

... 

<TextBlock Style="{StaticResource TitleText}"> 
    Some Text 
</TextBlock> 

但是,有没有办法让TextBlock的无知的风格(就像是当 HTML是适用于该元素的CSS规则分开)?

我只想给所有相关的StackPanels提供相同的类ID,然后将 样式应用于类ID。

回答

4

不幸的是,这在WPF中是不可能的。最接近你的是你在你的例子中展示的。

不过,如果你想将样式应用于所有 StackPanels在相同根容器,您可以指定样式为根容器的资源,留下x:Key属性了。作为一个例子:

<Grid x:Name="LayoutRoot"> 
    <Grid x:Name="StackPanelsRoot"> 
     <Grid.Resources> 
      <Style TargetType="StackPanel"> 
       ... 
      </Style> 
     </Grid.Resources> 
     <StackPanel x:Name="SP1" ... /> 
     <StackPanel x:Name="SP2" ... /> 
     ... 
    </Grid> 
    <StackPanel x:Name="SP3" ... /> 
    ... 
</Grid> 

这里,风格将被应用到SP1SP2,但不SP3

0

的TargetType将自动设定样式上该类型的所有对象。如果你想有一个具体的TextBlock退出的风格,你可以做这样的:

<TextBlock Style="{x:Null}"></TextBlock> 
+0

您唯一的选择是不设置TargetType并将样式单独应用到您希望应用到的每个TextBlock。 – novacara

1

可悲的是没有,但你可以创建一个attached property设置一个类,然后隐式样式应用于所有的TextBlocks但在该附加属性上使用Triggers来决定应用哪些设置器。不足之处在于,它当然还不是很好,但是风格的功能也是有限的,因为你不能在子过程中使用触发器。