Czy jest jakiś sposób, aby użyć StaticResource w bibliotece kontrolnej WPF i móc wyświetlać w czasie projektowania?

Mam bibliotekę kontrolną WPF, która jest dodawana do aplikacji formularzy systemu Windows. Chcemy, aby elementy sterujące mogły być lokalizowane, jednak nie jestem pewien, jak W PEŁNI dokonać tego bez powielania kodu.To właśnie robię teraz.

Zasadniczo, w aplikacji formularzy systemu Windows, przed uruchomieniem głównej aplikacji, tworzę instancję App.xaml, która działa w aplikacji formularzy (zawierającą moje linki do moich zasobów, które również działają w aplikacji formularzy). Działa to doskonale w czasie wykonywania.

Jednak mój użytkownik kontroluje wszystkieContent="{StaticResource SomeVariableName}", które są puste. Mogę to naprawić, mając app.xaml i odpowiednie słowniki zasobów w mojej bibliotece kontrolnej, które pasują do tych w mojej aplikacji formularzy systemu Windows. Jest to jednak zduplikowany kod.

Rzeczy, które już próbowałem bezskutecznie:

Uruchom aplikację App.xaml, która mieszka w bibliotece kontroli użytkownika z poziomu mojej aplikacji formularzy. Nie działa to, ponieważ identyfikatory URI moich zasobów szukają wbudowanego zasobu, a nie mojego lokalnego słownika zasobów (mógłbym wtedy po prostu skopiować pliki zasobów z formantu do odpowiedniej lokalizacji w mojej aplikacji formularzy na kompilacji). Czy mogę wykorzystaćDeferrableContent tutaj? W tym atrybucie nie można znaleźć zbyt wiele informacji o Internecie i jak należy go używać.Chciałbym używać kompilacji postów zarówno dla aplikacji, jak i słowników, jednak instancja aplikacji jest statycznym odniesieniem do skompilowanej aplikacji.xaml, o ile mi wiadomo. Więc App.xaml musi żyć przynajmniej w formiePróbowałem mieć zduplikowaną aplikację App.xaml z post-buildem przenoszącym resourcedictionary.xaml. Doszedłem do wniosku, że zduplikowana aplikacja.xaml jest w porządku, ponieważ jest to siła napędowa, a Ty i tak możesz nie chcieć polegać na jednym z kontrolek (który krąży i sprawia, że ​​zastanawiasz się, czy powinieneś mieć App.xaml w kontroli w wszystko? Jeśli nie chcesz zezwolić na domyślne użycie zasobów osadzonych ....) To też nie powiodło się mówiąc, że nie może znaleźć zasobu, nawet jeśli został umieszczony tam, gdzie powinien wskazywać URI. Dekompilowany kod wskazuje naUri resourceLocater = new Uri("/WindowsFormsApplication3;component/app.xaml", UriKind.Relative);

Czy jest więc jakiś sposób na to, aby to zadziałało ORAZ posiadanie czasu na domyślne przeglądanie komponentów i unikanie powielania? Czy w tym przypadku duplikacja jest OK? Jeśli moja podpozycja na drugi pocisk wydaje się w porządku (zduplikowana aplikacja App.xaml z kompilacją skopiowanych zasobów), jak sprawić, by nie szukał elementu na poziomie komponentu, a zamiast niego pierwszego poziomu pliku?

Ostatnie pytanie (i jeśli to konieczne, mogę je opublikować osobno), na które właśnie zwróciłem uwagę. Mój App.xaml jest wbudowywany w kod, więc nie pozwala mi to na tworzenie nowych ResourceDictionaries w locie. Czy jest jakiś sposób, aby to zrobić?

Ostateczna opcja ... prawdopodobnie najlepsza? - I tak planuję używać kodu Andre van Heerwaarde, więc powinienem tylko sprawdzić, czy istnieje plik i dodać go jako połączony zasób w locie? Zasadniczo, mam jedną aplikację App.xaml w mojej kontroli użytkownika, która łączy się z domyślnym osadzonym słownikiem ResourceDictionary. A potem kod powinien szukać odpowiednich zlokalizowanych zasobów w locie, które mogą być względnymi ścieżkami plików? Jedynym minusem, jaki tu widzę, jest to, że domyślnie nie można zmienić w locie ... co prawdopodobnie mógłbym nawet zobaczyć w określonym miejscu (używając jakiejś konwencji) i mieć to w porównaniu z wbudowanym?

Och, a moim powodem, dla którego nie chcę osadzać zasobów, jest to, aby użytkownicy końcowi mogli dodawać / modyfikować nowe zlokalizowane zasoby po wdrożeniu kompilacji.

Mogę dodać kod, jeśli pomoże ci to lepiej zobrazować, daj mi znać.

AKTUALIZACJA

Mam teraz kolejny problem ze stylizacją, a nie tylko lokalizacją.

Oto przykład jednego z wewnętrznych przycisków na jednym z elementów sterujących:

<code><Button Style="{StaticResource GrayButton}"
</code>

Jeszcze kilka rzeczy, które próbowałem / myślałem:

Nie mogę utworzyć aplikacji.xaml (która nigdy nie byłaby używana) z ustawionym ResourceDictionary, ponieważ definicje ApplicationDefinitions nie są dozwolone w projektach bibliotecznych. Mogę to osadzić w zasobach kontrolnych, ale wtedy zawsze miałoby to pierwszeństwo przed wszelkimi zasobami na poziomie aplikacji i tracę możliwość dostosowania.

Oto przypadek połączenia to rzeczywiście brzmi jak to, czego szukam, jednak nie zapewnia to żadnego rzeczywistego rozwiązania

Rozwiązanie (poza szczytem… które nie działa), o którym mogę pomyśleć, że może działać (i jeszcze nie spróbować), również wydaje się dużo pracy na coś, co moim zdaniem powinno być proste. Ale mogę być w stanie utworzyć pewne właściwości zależności w formancie, z którym mogę powiązać, a następnie zezwolić na zastąpienie tych przez projekt, który będzie używał kontrolki. Jak już wspomniałem, wydaje się, że to całkiem sporo pracy dla całkiem prostej prośby :). Czy to zadziała? Co ważniejsze, czy istnieje lepsze, prostsze rozwiązanie, którego brakuje?

questionAnswers(3)

yourAnswerToTheQuestion