Style.TargetType Eigenschaft

Definition

Ruft den Typ ab, für den die Formatvorlage vorgesehen ist, oder legt diese fest. TargetType kann verwendet werden, um eine implizite Stilressource zu deklarieren, wenn kein Ressourcenschlüssel angegeben ist.

public:
 property TypeName TargetType { TypeName get(); void set(TypeName value); };
TypeName TargetType();

void TargetType(TypeName value);
public System.Type TargetType { get; set; }
var typeName = style.targetType;
style.targetType = typeName;
Public Property TargetType As Type
<Style TargetType="typeName"/>

Eigenschaftswert

Der Typ des Objekts, auf den der Stil angewendet wird. Dieser Wert wird in der Regel in XAML und nicht in Code festgelegt. Siehe Hinweise.

Beispiele

In diesem Beispiel werden zwei Stile erstellt: eine für einen TextBlock und eine für ein TextBox-Objekt. Jede Formatvorlage wird auf zwei Instanzen eines Steuerelements angewendet, um eine einheitliche Darstellung für jeden TextBlock und TextBox zu erstellen. Im Beispiel wird die FrameworkElement.Style-Eigenschaft jedes Steuerelements festgelegt, indem auf style als{StaticResource}-Markuperweiterung verwiesen wird.

<StackPanel x:Name="rootPanel">
  <StackPanel.Resources>
    <!--Create a Style for a TextBlock to specify that the
              Foreground equals Navy, FontSize equals 14, and
              VerticalAlignment equals Botton.-->
    <Style TargetType="TextBlock" x:Key="TextBlockStyle">
      <Setter Property="Foreground" Value="Navy"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="VerticalAlignment" Value="Bottom"/>
    </Style>

    <!--Create a Style for a TextBox that specifies that
              the Width is 200, Height is 30, Margin is 4,
              Background is LightBlue, and FontSize is 14.-->
    <Style TargetType="TextBox" x:Key="TextBoxStyle">
      <Setter Property="Width" Value="200"/>
      <Setter Property="Height" Value="30"/>
      <Setter Property="Margin" Value="4"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="Background">
        <Setter.Value>
          <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
            <GradientStop Color="White" Offset="0.0"/>
            <GradientStop Color="LightBlue" Offset="0.5"/>
            <GradientStop Color="Navy" Offset="1"/>
          </LinearGradientBrush>
        </Setter.Value>
      </Setter>
    </Style>
  </StackPanel.Resources>

  <!--Apply the TextBlockStyle and TextBoxStyle to each 
      TextBlock and TextBox, respectively.-->
  <StackPanel Orientation="Horizontal">
    <TextBlock Text="First Name:" Style="{StaticResource TextBlockStyle}"/>
    <TextBox Style="{StaticResource TextBoxStyle}"/>
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <TextBlock Text="Last Name:" Style="{StaticResource TextBlockStyle}"/>
    <TextBox Style="{StaticResource TextBoxStyle}"
             Margin="6,4,4,4"/>
  </StackPanel>
  <StackPanel x:Name="emailAddressPanel" Orientation="Horizontal"/>
</StackPanel>

Hinweise

Ein TargetType-Wert ist für alle Fälle erforderlich, in denen Sie einen Style verwenden oder deklarieren. Es ist kein Standardwert vorhanden. Selbst ein Style , der als Inlinewert der FrameworkElement.Style-Eigenschaft verwendet wird, erfordert einen expliziten TargetType-Wert.

Die typische Methode zum Angeben eines TargetType-Werts ist ein XAML-Attribut für das Style-Element . Wenn sie in XAML festgelegt sind, übernehmen die Bedeutung von TargetType und die von Ihnen bereitgestellten Werte einige Aspekte der Darstellung von Typen in XAML.

Für XAML sollten alle Präfixe, die erforderlich wären, um über eine XAML-Elementverwendung auf einen Typ zu verweisen, in den TargetType-Attributwert eingeschlossen werden. Wenn eine Formatvorlage beispielsweise auf einen benutzerdefinierten Typ abzielt, der in einem Codenamespace definiert ist, der dem Präfix "local:" zugeordnet ist, sollte der TargetType-Attributwert für die Formatvorlage dieses Typs das gleiche Präfix vor dem Typnamen enthalten. Dieses Verhalten wird durch integriertes Zeichenfolgenkonvertierungsverhalten im Windows-Runtime XAML-Parser aktiviert.

Wenn Sie Stile für benutzerdefinierte Typen definieren, fügen Sie nach dem Einfügen eines Zuordnungspräfixes für einen TargetType kein Präfix in den Eigenschaftswert eines Setter innerhalb dieses Stils ein.

Der Wert, den Sie für TargetType angeben, ändert das Nachschlageverhalten für jeden Setter.Property-Wert , den Sie innerhalb des Stils angeben. Insbesondere wird erwartet, dass die Abhängigkeitseigenschaften, auf die Sie anhand des Namens für einen Setter.Property-XAML-Attributwert verweisen, im TargetType-Typ oder in einer beliebigen Vorgängerklasse vorhanden sind. Wenn der von Ihnen angegebene TargetType beispielsweise Button ist und einer der Setter.Property-XAML-Attributwerte im Style "Background" ist, wird dies in die Control.Background-Eigenschaft aufgelöst (Control ist in seiner Klassenvererbung drei Ebenen höher als Button , und Button erbt alle Eigenschaften von Control). Es ist typisch, den TargetType-Wert so anzugeben, dass es sich um dieselben Benutzeroberflächenelementnamen handelt, die Sie im typischen UI-Markup verwenden würden. Sie würden in der Regel keine Vorgängerklasse benennen (obwohl dies technisch zulässig ist).

Wenn style einenSetter enthält, der eine Steuerelementvorlage deklariert (ein Wert für die Template-Eigenschaft ), sollte der TargetType-Wert des übergeordneten Style mit dem TargetType-Wert des enthaltenen ControlTemplate-Elements übereinstimmen.

Implizite Stile

Stile werden fast immer als XAML-Ressourcen deklariert, die freigegeben und auf jedes UI-Element in der App angewendet werden, das auf diesen Stil verweist. Um als Ressource deklariert zu werden, müssen alle XAML-Elemente, einschließlich der Style-Elemente , einen Schlüssel in der Ressourcenauflistung enthalten, der jede Ressource für die Suche zur Laufzeit unterscheidet. Das Style-Element (und auch die verschiedenen Vorlagenelemente wie ControlTemplate) unterstützen ein Feature, das als implizite Stile bezeichnet wird. Bei einem impliziten Stil dient der Wert, den Sie für den TargetType-Wert angeben, auch als Schlüssel für diesen Stil im Ressourcensammlungsbereich, und Sie müssen den x:Key-Attributwert nicht angeben. (Im Gegensatz dazu benötigen die meisten anderen Elemente, die Sie in einer Ressourcensammlung deklarieren, einen expliziten x:Key-Attributwert , und Sie erhalten Entwurfszeit- oder Parserfehler, die dies erzwingen.)

Eine Formatvorlage, die mithilfe des impliziten Stils deklariert wird, wird dann als Style-Wert für jedes UI-Element instance verwendet, das speziell vom Typ ist, der dem TargetType des impliziten Stils entspricht. Steuerelemente müssen nicht auf einen Stil mit einem Style-Attributwert und einem {StaticResource}-Markuperweiterungsverweis auf einen Schlüssel verweisen, um dieses Verhalten zu erhalten. Es ist implizites Verhalten, wenn diese Steuerelemente mit dem Typ eines vorhandenen impliziten Stils übereinstimmen.

Implizite Stile gelten nicht für Elemente, die Untertypen des Typs sind, auf den als TargetType-Wert verwiesen wird. Wenn Sie beispielsweise einen impliziten Stil für ToggleButton-Steuerelemente deklarieren und Ihre App über CheckBox-Steuerelemente verfügt (CheckBox wird von ToggleButton abgeleitet), gilt die Formatvorlage speziell für ToggleButton-Steuerelemente , aber nicht für CheckBox-Steuerelemente .

Die Windows-Runtime definiert implizite Standardstile für jedes praktische UI-Element, das Teil der Windows-Runtime-API ist. Dies ist erforderlich, da diese Stile die Visuals für Elemente (insbesondere die Vorlagen) definieren und ein Element ohne Visuals nicht einmal auf der Benutzeroberfläche angezeigt wird oder am Layout teilnimmt. Alle diese impliziten Stile können in der XAML-Datei des Entwurfshilfsprogrammes mit dem Namen generic.xaml angezeigt werden. Die Tools, die Sie zum Bearbeiten von XAML verwenden, können einzelne Teile dieser Datei in den XAML-Code Ihrer App als Ausgangspunkt kopieren, wenn Sie Kopien von Formatvorlagen bearbeiten, wie von den Tools aktiviert. Innerhalb der impliziten Standardstile gibt es viele Ebenen von Ressourcenreferenzen sowie Designunterstützung, die die {ThemeResource}-Markuperweiterung und designspezifische Pinsel oder andere Ressourcen verwenden. Sie können alle impliziten Stile überschreiben, die andernfalls aus dem Windows-Runtime definieren implizite Standardstile. Weitere Informationen finden Sie unter Schnellstart: Formatieren von Steuerelementen und Schnellstart: Steuerelementvorlagen.

Verwenden von TargetType im Code

Das Festlegen von TargetType im Code ist ungewöhnlich. Das XAML-Stilsystem soll verwendet werden, indem XAML als Ressource geladen wird und alle Aspekte eines Stils im Voraus bereit sind. Es sollte sehr wenige Szenarien geben, in denen Sie bis zur Laufzeit keine Informationen zum Formatieren eines Steuerelements oder zum Anwenden eines Stils kennen, in denen es erforderlich wäre, einen TargetType für eine Formatvorlage festzulegen, die im Code erstellt oder referenziert wird.

Das Abrufen eines TargetType im Code ist ebenfalls ungewöhnlich, aber es gibt vielleicht noch einige weitere Szenarien, in denen Sie dies tun können. Beispielsweise kann es bereits eine Reihe benannter Style-Ressourcen geben, die in Ihrem XAML-Code definiert sind. Möglicherweise möchten Sie jedoch überprüfen, ob ein Format, das Sie auf ein Steuerelement anwenden möchten, über einen TargetType-Wert verfügt, der für den Typ des Steuerelements geeignet ist, auf das Sie es anwenden. Möglicherweise verfügen Sie also über Code wie den folgenden:

private bool VerifyStyle(FrameworkElement scope, String styleKey, Control applyTo)
{
    Style styleToCheck = scope.Resources[styleKey] as Style;
    if (styleToCheck != null)
    {
        if (styleToCheck.TargetType == applyTo.GetType())
        {
            // applyTo.Style = styleToCheck;
            return true;
        }
    }
    return false;
}

Tipp

Wenn Sie mit einer Microsoft .NET-Sprache (C# oder Microsoft Visual Basic) programmieren, wird der TypeName-Typ als System.Type ausgeführt. Bei der Programmierung mit C#C# verwenden Sie in der Regel den typeof-Operator , um Verweise auf den System.Type eines Typs basierend auf einem Typnamen als Zeichenfolge abzurufen. Verwenden Sie in Microsoft Visual Basic GetType.

Migrationshinweise

  • Wenn Sie XAML für Windows Presentation Foundation (WPF) verwendet haben, haben Sie möglicherweise eine x:Type-Markuperweiterung verwendet, um XAML-Werte auszufüllen, die einen System.Type-Wert annehmen. Der Windows-Runtime XAML-Parser unterstützt x:Type nicht. Stattdessen sollten Sie auf den Typ anhand des Namens verweisen, ohne markuperweiterungen zu verwenden, und jede erforderliche XAML-in-backing-Typkonvertierung wird bereits vom integrierten Konvertierungsverhalten im XAML-Parser behandelt.

Gilt für: