2009-08-11 15 views
0

x:Keyで参照しているリソース辞書に外部スタイルリソースがあります。これには、ターゲット(TextBlock)を指定するx:TargetTypeがあります。これをTextBlockを含むコントロールに適用し、そのコントロール内のすべてのTextBlock要素にスタイルを適用させることはできますか?WPF/XAML:異なるTargetTypeでスタイルを設定しますか?

おかげで、 ロバート

答えて

4

外部スタイルリソースに基づいているコントロール内のスタイルで、x:Keyは指定せず、TargetTypeのみを指定します。

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource SomeOtherStyle}"> 

キーなしでは、コントロール内のすべてのTextBlockに適用されます。

0

ありませんが、あなたは自動的にこのように、特定のタイプのすべての要素にスタイルを適用することができます。それを行う最も簡単な方法を定義することです

<!-- Applies to all buttons in scope of this style --> 
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}"> 
    ... 
</Style> 
0

私は、これはあなたが探しているものだと思う:

カスタムユーザーコントロール "テスト":

<UserControl x:Class="WpfApplication4.test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300" Width="300"> 
    <Grid> 
     <TextBlock>test</TextBlock> 
    </Grid> 
</UserControl> 

あなたのスタイル文書 "RES/Styles.xaml"

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Style TargetType="{x:Type TextBlock}"> 
    <Style.Setters> 
     <Setter Property="Foreground" Value="Blue" /> 
    </Style.Setters> 
</Style> 

メインウィンドウまたは親:

<Window x:Class="WpfApplication4.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:uc="clr-namespace:WpfApplication4" 
Title="Window1" Height="300" Width="300"> 
<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Res/Styles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

<Grid> 
    <uc:test></uc:test> 
</Grid> 

カスタムコントロール「テスト」でテキストブロックは現在、ブルー、フォアグラウンドで表示されます。

+0

Yup;ただし、これはSilverlightでは動作しません。しかし、それはクールです。私は別のプロパティをラップして解決しました。ありがとう! –

1

他のコメントを少し拡大してください。 Brandonが示したように構文を使用するとき:BasedOn = ""は基本的にスタイルの "継承"の一種です。このスタイルは、それが基になっているスタイルのものから基本的なセッターのセットを持ちます。これにより、この場合にのみ適用されるオプションを使用するか、必要に応じてスタイルの範囲を再定義するオプションを使用してスタイルを拡張することができます。

辞書スタイルのスタイルは、キー付きスタイルとして使用でき、明示的にしか適用できません。 Brandonが示したようにあなたのスタイルを「再定義する」ことによって、キーを省略してスコープを再定義することができ、そのスタイルの範囲内のターゲットタイプのすべての要素に適用されます。すべてのTextBlockがグリッド内にあれば、次のようなことができます:

<Grid.Resources> 
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource MyBaseStyle}">     
</Style> 
</Grid.Resources> 
関連する問題