Laden...

Auslagern von Window.Resources in eigene Dateien

Erstellt von ofbe vor 13 Jahren Letzter Beitrag vor 13 Jahren 5.677 Views
O
ofbe Themenstarter:in
39 Beiträge seit 2010
vor 13 Jahren
Auslagern von Window.Resources in eigene Dateien

Hi Leute, ich möchte die Property LinearGridBrush in eine eigene Resource-Datei auslagern und Rechtecke damit befüllen.

Bisjetzt habe ich es geschafft dies in einer <Window.Resource> in der selben Datei.xaml wie die Hauptanwendung unterzubringen und das Rechteck mit Fill={StaticResource ResourceKey:Key} zu befüllen.

Ich möchte aber nciht, dass mein Code so augfgebläht ist, deswegen möchte ich nun die <Window.Resources> in eigene eigene Resource.xaml unterzubringen und später in der Hauptanwendung zu includen

Wie geht das, was muss ich beachten, wie funktioniert das Einbinden dieser Resource in die Hauptanwendung?

Habs schon mit ResourceDictionary versucht, jedoch scheitert diese Lösungsmöglichkeit.

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

Habs schon mit ResourceDictionary versucht, jedoch scheitert diese Lösungsmöglichkeit.

Damit hast du schon die richtige Lösung. Was funktioniert bei dir nicht?

Baka wa shinanakya naoranai.

Mein XING Profil.

5.742 Beiträge seit 2007
vor 13 Jahren

Wie geht das, was muss ich beachten, wie funktioniert das Einbinden dieser Resource in die Hauptanwendung?

Generell kannst du ein ResourceDictionary entweder in der App.xaml ("Shared Resources") oder in den Resourcen des Window (ResourceDictionary.MergedDictionaries) einbinden.
Unterschied ist, dass die Resourcen bei erster Möglichkeit automatisch allen Fenstern der Anwendung, bei letzerer nur dem jeweiligen Fenster zur Verfügung stehen.

O
ofbe Themenstarter:in
39 Beiträge seit 2010
vor 13 Jahren

wenn ich folgenden Code in die App.xaml einfüge

 <Window.Resources> <LinearGradientBrush x:Key="LinearGradientBrush" StartPoint="0,0" EndPoint="1,1"> <GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.1" Color="Black" />
</LinearGradientBrush>
</Window.Resources>

also in <Application> im App.xaml
dann kommt die Fehlermeldung

Der Window-Typ enthält keine anfügbare Resources-Eigenschaft wie muss ich dies denn dort einfügen und wie kann ich dies in die hauptanwendung includen, oder steht dann der x:Key sofort zur Verfügung?Gibt es eigentlich die Möglichkeit, dass ich WPF-Fenster erstelle und diese Children-Fenster in die Hauptanwendung bzw in das Top-Fenster einfach in einem panel inkludiere sozsagen quasi wie ein iframe, nur für wpf-windowsalso ich möchte ganz einfach code auslagern, damit mein Quellcode nciht so aufgebläht ist..bezogen auf xaml und WPF

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

Die Application hat keine Window.Resources sonder Application.Resources

Beispiel


<Application>
    <Application.Resources>
		<LinearGradientBrush x:Key="LinearGradientBrush" StartPoint="0,0" EndPoint="1,1">
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.1" Color="Black" />
</LinearGradientBrush>
	</Application.Resources>
</Application>

Du kannst die Resource dann über {StaticResource LinearGradientBrush} laden.
Wenn du einen Style oder ein Template erstellst dann kannst du das x:Key weglassen, damit wird er automatisch für alle passenden Controls angewendet.

Gibt es eigentlich die Möglichkeit, dass ich WPF-Fenster erstelle und diese Children-Fenster in die Hauptanwendung bzw in das Top-Fenster einfach in einem panel inkludiere sozsagen quasi wie ein iframe, nur für wpf-windows

Ja. Schau dir mal das TabControl an.

Gruss
Michael

O
ofbe Themenstarter:in
39 Beiträge seit 2010
vor 13 Jahren

alles klar ich danke dir, das hat nun geklappt,

aber nun steht die Resource der gesamten Anwendung zur Verfügung, d.h. die Geschwindigkeit müsste auch dadrunter leiden, wär ja besser, wenn ich die Resource nur einmal definiere, und nur dann aufrufe, wenn sie gebraucht wird, zb bei Fill Rectangle oder?

hmm mit tabcontrol soll das gehen..quasi


<tabcontrol>
<tabitem>
<!-- resource wpf (fenster) in resource.xaml -->
</tabitem>
</tabcontrol>

dann wäre der code übersichtlich und lesbar

Hinweis von michlG vor 13 Jahren

Bitte beachte: [Hinweis] Wie poste ich richtig? Punkt 6.
Danke

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo ofbe,

wenn du unbedingt willst dann kann du auch ein neues ResourceDictionary erstellen und dieses dann in die Resource deines Windows laden.
Dabei hast du das schön getrennt.

Beispiel


  <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="MyProject/MainResources.xaml"/>
          <ResourceDictionary Source="MyProject/MainResources2.xaml"/>
        </ResourceDictionary.MergedDictionaries>     </ResourceDictionary>
    </Application.Resources>

Du könntest dann deine Dictionary-Dateien erstellen und diese dann so einbinden.

Als kurz gesagt gibt es die Faustregel dass man die Ressource so nah wie möglich und so weit wie nötig auslagern sollte.
Wenn du eine Resource in mehreren Windows brauchst dann ist es auch sinnvoll diese so weit auszulagern dass du von beiden darauf zugreifen kannst 😉

Hier ein kleines Tutorial dazu: Using Resource Dictionary in WPF

Gruss
Michael