9 Stimmen

Wie kann ich einen Stil auf das Window Control in WPF anwenden?

Ich setze einen Stil für das Fenster in der App.xaml als solche:

<Application x:Class="MusicRepo_Importer.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" StartupUri="TestMaster.xaml">
    <Application.Resources>

        <Style TargetType="Window">
            <Setter Property="WindowStyle" Value="None"></Setter>
        </Style>

    </Application.Resources>
</Application>

Mit dem ich im Grunde jedes Fenster seine WindowStyle-Eigenschaft Wert auf None (den Standard-Windows-Rahmen und Rahmen zu entfernen) festgelegt haben wollen; Aber es funktioniert nicht.

Was übersehe ich hier?

22voto

Quintin Robinson Punkte 78652

Ich glaube, Sie müssen den Stil benennen und ihn wie folgt auf jedes Fenster anwenden.

In app.xaml/resources..

<Style x:Key="MyWindowStyle" TargetType="Window">
    <Setter Property="WindowStyle" Value="None"></Setter>
</Style>

Dann in der window.xaml..

<Window x:Class="MusicRepo_Importer.MyWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="MyStyledWindow" Style="{StaticResource MyWindowStyle}">

Das sollte funktionieren, aber die einfache Anwendung des Stils mit TargetType für Window in der Ressource wird das Fenster nicht zwingen, diesen Stil zu verwenden, obwohl es für andere Elemente zu funktionieren scheint.

Bearbeiten:
Ich habe einige Informationen über die Anwendung von Standardstilen auf ein Fensterelement gefunden

Wenn Sie einen TargetType angeben, werden alle Instanzen dieses Typs die Eigenschaft Stil angewendet. Allerdings werden abgeleitete Typen nicht... so scheint es. <Style TargetType="{x:Type Window}"> wird nicht für alle Ihre benutzerdefinierten Ableitungen/Fenster. <Style TargetType="{x:Type local:MyWindow}"> wird nur auf MyWindow angewendet. Daher sind die Optionen sind

Verwenden Sie einen verschlüsselten Stil, den Sie als Eigenschaft "Stil" jedes Fensters angeben, das das den Stil anwenden soll. Der Designer zeigt das gestylte Fenster an.

Von der Frage: Wie man Standard WPF Window Style in app.xaml festlegen?

Die Person, die die Frage beantwortet hat, hatte eine interessante Idee über die Vererbung von einem Basisfenster, das den Stil angewendet hat.

9voto

Andrew Mikhailov Punkte 1009

Ich weiß, dass diese Frage schon ziemlich alt ist, aber ich werde sie trotzdem beantworten.

Hier ist der Code, der gut für mich in C# 4.0 funktioniert. Es dupliziert nur Stil für alle Unterklassen in der Ressource-Wörterbuch.

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        if (this.Resources.Contains(typeof(Window)))
        {
            var types = Assembly.GetEntryAssembly().GetTypes();
            var subTypes = types.Where(x => x.IsSubclassOf(typeof(Window)));

            Style elementStyle = (Style)this.Resources[typeof(Window)];

            foreach (Type subType in subTypes)
            {
                if (!this.Resources.Contains(subType))
                {
                    this.Resources.Add(subType, elementStyle);
                }
            }
        }

        base.OnStartup(e);
    }
}

Jetzt sollte Ihr Stil aus App.xaml für alle Windows-Systeme funktionieren.

p.s. Ja, ich weiß, das ist nicht der sauberste oder schnellste Weg, aber es funktioniert :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X