none
ResourceDictionary referenzieren RRS feed

  • Frage

  • Hallo zusammen,

    Ich habe zwei Projekte

    - Ein Benutzersteuerelementprojekt, um Controls zu definieren

    - Ein "normales" WPF-Projekt, um die Fenster zu definieren

    Im Steuerelementprojekt lege ich nun ein ResourceDictionary unter UserControls/Styles/Buttons.xaml an.

    Dann definiere ich ein Custom Control. In diesem versuche ich, die Buttons.xaml als Style zu laden:

     

    ResourceDictionary resources = new ResourceDictionary();

    resources.Source = new Uri(@"[PATH]", UriKind.RelativeOrAbsolute);

     

    Gebe ich einen absoluten Pfad auf dem Dateisystem an, so findet mein Custom Control die Ressource (ich habe den Buildvorgang von Buttons.xaml auf "Resource" gesetzt).

    Gebe ich relative Pfade an, so findet er es einfach nicht (ich habe schon nahezu alle Kombinationen durchprobiert). Was mache ich falsch?

    Grüße,

    Thomas



    Donnerstag, 5. Januar 2012 09:26

Alle Antworten

  • du könntest in der App.xaml des "normalen" projektes das ResourceDictionary aus deinem steuerelementprojekt einbinden.

     

     <Application.Resources>
             
        	<ResourceDictionary>
        		<ResourceDictionary.MergedDictionaries>
        			<ResourceDictionary Source="pack://application:,,,/Assemblyname;component/UserControls/Styles/Buttons.xaml" />
                </ResourceDictionary.MergedDictionaries>
    ...
    

    Assemblyname müsstest du dann halt entsprechend noch anpassen an dein steuerelementprojekt.

     


    alternativ solle der URIpfad auch in dem von dir genutzten Code so gehen (ungetestet ;) )
    • Bearbeitet David.Handke Donnerstag, 5. Januar 2012 09:49 nachtrag wegen Code
    Donnerstag, 5. Januar 2012 09:48
  • Muss ich wirklich in der WPF-Anwendung die Ressource deklarieren, obwohl ich sie kein einziges Mal dort nutze?

    Evtl. habe ich mich auch falsch ausgedrückt:

    Sowohl Buttons.xaml als auch die Custom Control befinden sich im Benutzersteuerelementprojekt.

    Nur die Custom Control wird dann in der WPF-Anwendung selbst verwendet. Somit habe ich von der WPF-Anwendung keine direkte Verbindung zur Buttons.xaml.

    Danke für die schnelle Antwort.

    Donnerstag, 5. Januar 2012 10:42
  • aso, na dann pack das ins <usercontrol.resources> ;) da kannste wenn ich mich recht entsinne auch den pfad angeben wie du ihn oben hast (UserControls/Styles/Buttons.xaml)
    Donnerstag, 5. Januar 2012 11:03
  • Sorry wenn ich nerve, ich habe leider bisher noch nicht viel mit Custom Controls angestellt.

     

    Bei Custom Controls habe ich ja kein eigenes XAML-File und auch kein <UserControl.Resources>, oder?

    Donnerstag, 5. Januar 2012 11:11
  • ach ich depp. klar, mein fehler. du legst doch aber eigentlich nen defaultstyle dafür an, richtig?
    Donnerstag, 5. Januar 2012 11:53
  • Hier der gesamte Code der Klasse:

        public class FlightControlButton : Button
        {
            static FlightControlButton()
            {
                DefaultStyleKeyProperty.OverrideMetadata(typeof(FlightControlButton), new FrameworkPropertyMetadata(typeof(FlightControlButton)));
            }
    
            public FlightControlButton()
            {
                ResourceDictionary resources = new ResourceDictionary();
                resources.Source = new Uri(@"D:\[...]\UserControls\Styles\Buttons.xaml", UriKind.RelativeOrAbsolute);
    
                Style = (Style)resources["styleFlightButton"];
            }
        }
    


    Anstatt "D:\[...]" bräuchte ich hier jetzt einen relativen Pfad.

     

    In der Buttons.xaml ist dann der Key "styleFlightButton" deklariert.

    Donnerstag, 5. Januar 2012 13:48
  •             ResourceDictionary resources = new ResourceDictionary();
                resources.Source = new Uri(@"UserControls\Styles\Buttons.xaml", UriKind.RelativeOrAbsolute);

                Style = (Style)resources["styleFlightButton"];

     

    mal damit versucht?

    in nem mini feldversuch hats bei mir geklappt

    Donnerstag, 5. Januar 2012 15:16
  • Nein, funktioniert leider nicht. Das und alle möglichen denkbaren anderen Kombinationen habe ich schon probiert ...

    Als Komponente und Window noch im selben Projekt waren, hat es auch funktioniert. Erst, seit ich das Benutzersteuerelementprojekt angelegt habe, funktioniert die relative Referenzierung nicht mehr.

    Edit:

    Nachdem ich alle Elemente aus dem Subprojekt in das Hauptprojekt zurückgezogen habe, funktioniert der relative Pfad auch wieder. Also muss das Problem wohl mit der Trennung in zwei Projekte zu tun haben ...

    Montag, 9. Januar 2012 17:39