Style.TargetType Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 das die Formatvorlage angewendet wird. Dieser Wert wird normalerweise 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.This example creates two styles: one for a TextBlock and one for a TextBox. Jede Formatvorlage wird auf zwei Instanzen eines Steuerelements angewendet, um eine einheitliche Darstellung für jede TextBlock
und zu TextBox
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 eine Formatvorlage verwenden oder deklarieren. Es ist kein Standardwert vorhanden. Auch ein Style
, der als Inlinewert der FrameworkElement.Style-Eigenschaft verwendet wird, erfordert einen expliziten TargetType
Wert.
Die typische Methode zum Angeben eines Werts TargetType
ist ein XAML-Attribut für das Style-Element . Wenn sie in XAML festgelegt sind, übernehmen die Bedeutung und TargetType
die von Ihnen angegebenen 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, im TargetType
Attributwert enthalten sein. Wenn eine Formatvorlage beispielsweise auf einen benutzerdefinierten Typ abzielt, der in einem Codenamespace definiert ist, der dem Präfix "local:" zugeordnet ist, sollte der Attributwert für die TargetType
Formatvorlage dieses Typs das gleiche Präfix vor dem Typnamen enthalten. Dieses Verhalten wird durch das integrierte Zeichenfolgentypkonvertierungsverhalten 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 ein 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 der Formatvorlage angeben. Insbesondere wird erwartet, dass die Abhängigkeitseigenschaften, auf die Sie anhand des Namens für einen Setter.Property
XAML-Attributwert verweisen, für den TargetType
Typ oder für eine beliebige Vorgängerklasse vorhanden sind. Wenn TargetType
Sie beispielsweise Button angeben, und einer der Setter.Property
XAML-Attributwerte in der Formatvorlage ist "Background", wird dies in die Control.Background-Eigenschaft aufgelöst (Control ist drei Ebenen über Button in seiner Klassenvererbung und Button
erbt alle Eigenschaften von Control). Es ist üblich, den TargetType
Wert so anzugeben, dass es sich um dieselben Benutzeroberflächenelementnamen handelt, die Sie im typischen UI-Markup verwenden würden. Normalerweise würden Sie eine Vorgängerklasse nicht benennen (obwohl dies technisch zulässig ist).
Wenn der Style einen Setter 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 diese Formatvorlage verweist. Um als Ressource deklariert zu werden, müssen alle XAML-Elemente, einschließlich der Style-Elemente , einen Schlüssel in der Ressourcensammlung aufweisen, 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 einer impliziten Formatvorlage dient der Wert, den Sie für den TargetType
Wert angeben, auch als Schlüssel für diese Formatvorlage im Ressourcenauflistungsbereich, und Sie müssen den x:Key-Attributwert nicht angeben. (Im Gegensatz dazu benötigen die meisten anderen Elemente, die Sie innerhalb 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 eine Formatvorlage mit einem Style-Attributwert und einem {StaticResource}-Markuperweiterungsverweis auf einen Schlüssel verweisen, um dieses Verhalten abzurufen. 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 TargetType
als Wert verwiesen wird. Wenn Sie beispielsweise eine implizite Formatvorlage für ToggleButton-Steuerelemente deklarieren und Ihre App über CheckBox-Steuerelemente verfügt (CheckBox
von ToggleButton
), gilt die Formatvorlage speziell ToggleButton
für 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 Entwurfshilfsprogramm namens generic.xaml angezeigt werden. Die Tools, die Sie zum Bearbeiten von XAML verwenden, können diskrete 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 Ressourcenreferenzebenen sowie Designunterstützung, die die {ThemeResource}-Markuperweiterung und designspezifische Pinsel oder andere Ressourcen verwendet. Sie können jede implizite Formatvorlage überschreiben, die andernfalls von der Windows-Runtime definiert implizite Standardstile. Weitere Informationen finden Sie unter XAML-Stile und XAML-Steuerelementvorlagen.
Verwenden von TargetType im Code
Das Festlegen TargetType
im Code ist ungewöhnlich. Das XAML-Stilsystem soll verwendet werden, indem XAML als Ressource geladen wird und alle Aspekte eines Stils vorab bereit sind. Es sollte nur sehr wenige Szenarien geben, in denen Sie bis zur Laufzeit keine Informationen zum Formatieren eines Steuerelements oder zum Anwenden einer Formatvorlage kennen, in denen ein TargetType für eine Formatvorlage festgelegt werden muss, die im Code erstellt wurde oder auf die verwiesen wird.
Das Abrufen eines TargetType
in Code ist ebenfalls ungewöhnlich, aber es gibt vielleicht noch ein paar 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. Sie können jedoch überprüfen, ob eine Formatvorlage, die Sie auf ein Steuerelement anwenden möchten, einen TargetType
Wert aufweist, der für den Typ des Steuerelements funktioniert, auf das Sie es anwenden. Sie können also Code wie folgt haben:
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 C# programmieren, wird der TypeName-Typ als System.Type ausgeführt. Bei der Programmierung mit C# verwenden Sie normalerweise den typeof
Operator, um Verweise auf einen System.Type
Typ basierend auf einem Typnamen als Zeichenfolge abzurufen.
Migrationshinweise
- Wenn Sie XAML für Windows Presentation Foundation (WPF) verwendet haben, haben Sie möglicherweise eine x:Type-Markuperweiterung verwendet, um alle XAML-Werte auszufüllen, die eine System.Type-Eigenschaft annehmen. Der Windows-Runtime XAML-Parser unterstützt x:Type nicht. Stattdessen sollten Sie auf den Typ nach Name verweisen, ohne eine Markuperweiterung zu verwenden, und jede erforderliche XAML-in-Backing-Typkonvertierung wird bereits vom integrierten Konvertierungsverhalten im XAML-Parser verarbeitet.