2011-11-29 44 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來決定應用哪些設置器。不足之處在於,它當然還不是很好,但是風格的功能也是有限的,因爲你不能在子過程中使用觸發器。