2009-08-11 10 views
0

Ich habe eine externe Stil-Ressource in einem Ressourcen-Wörterbuch, das ich mit x: Key referenziere. Es hat einen x: TargetType, der ein Ziel angibt (TextBlock). Ist es möglich, dies auf ein Steuerelement anzuwenden, das einen TextBlock enthält, und alle TextBlock-Elemente in diesem Steuerelement den Stil angewendet haben?WPF/XAML: Legen Sie einen Stil mit einem anderen TargetType fest?

Danke, Robert

Antwort

4

Der einfachste Weg, dass ein definieren wäre, zu tun Stil innerhalb des Controls, der auf Ihrer externen Stilressource basiert, aber keinen x: Schlüssel, nur den TargetType angeben.

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

Ohne einen Schlüssel wird es sich auf alle TextBlocks innerhalb des Steuerelements anwenden.

0

Nein, aber Sie können automatisch einen Stil für alle Elemente eines bestimmten Typs, wie dies gilt:

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

Ich denke, das ist das, was Sie suchen:

Ihre individuelle Benutzerkontrolle "test":

<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> 

Ihre Styles Dokument "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> 

Ihr Hauptfenster oder Ihr Hauptfenster:

<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> 

Der Textblock in dem Custom Controls "test" zeigt nun mit einem blauen Vordergrund.

+0

Yup; außer das funktioniert nicht in Silverlight. Aber das ist cool. Ich habe es gelöst, indem ich die Eigenschaft in eine andere eingepackt habe. Vielen Dank! –

1

Um ein bisschen auf andere Kommentare zu erweitern. Wenn Sie die Syntax wie Brandon verwenden zeigte:

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

Die BasedOn = „Vererbung“ von Stil „im Grunde eine Art ist“. Dieser Stil wird die Basis des Setter-Sets haben, auf dem er basiert. Dies gibt Ihnen die Möglichkeit, den Stil mit den Optionen zu erweitern, die nur in diesem Fall gelten, oder, falls erforderlich, den Umfang des Stils neu zu definieren.

Sie haben den Stil in Ihrer Wörterbuchdatei als Schlüsselstil, der nur explizit angewendet werden kann. Indem Sie Ihren Stil "neu definieren", wie Brandon gezeigt hat, können Sie den Bereich neu definieren, indem Sie den Schlüssel weglassen und ihn so auf alle Elemente des Zieltyps im Rahmen dieses Stils anwenden. Wenn also alle Ihre TextBlocks in einem Grid wären, könnten Sie folgendes haben:

<Grid.Resources> 
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource MyBaseStyle}">     
</Style> 
</Grid.Resources>