FrameworkElement.FindResource ResourceReferenceKeyNotFoundException
2021-07-20T23:21:10+02:00
2021-08-16T00:27:10+02:00
2022-07-18T22:32:10+02:00
BadBull
VS2019 ben (WPF App .NET Fw VisualBasic) a Window.xaml -ban (x:Name -vel) <Window.Resources> -ként van egy <Style TargetType="{x:Type ListBox}" x:Key="wrsListBox">.
Ha kódból (class.vb) hivatkoznék rá Style = FindResource("wrsListBox") akkor  ResourceReferenceKeyNotFoundException -t kapok. Az itt vázolt példákból nekem a sima FindResource is csak akkor találja meg a x:Key="wrsListBox"-t ha az, az Application.xaml ban <Application.Resources> -ként van megadva. Nyilván ha alkalmazáserőforrásként adom meg akkor működik, de mivel több ablakom van (az appból StartupUri="Window.xaml" kerül indításra) ezért nem az appba szeretném ömleszteni őket hanem szeparáltan ahova valók azaz az adott window.xaml ban.

Mit hagyhatok ki ill. miért nem működik a példa lapján ?
Köszi előre is!
Mutasd a teljes hozzászólást!

  • A FindResource az Application metódusa. Csak az abban definiált resource-ok kereshetők benne. De minden  FrameworkElement vagy FrameworkContentElement-nek van egy tulajdonsága amit valamiElementNeve.Resources["element kulcsa"] alapján lehet elérni.

    Viszont én személy szerint nem ajánlom, hogy apró kicsi element-hez rendelt resource-okat hozzál létre. A resource csodálatosan felépíthető, mert az is lehet objektum orientált. Egyik öröklődhet a másikból. Ez a BasedOn="{StaticResource szülőNeve}" és az mind mehet az Application.Resources-ba.

    Ha ezt az egészet pedig resource reference-el csinálod, akkor rögtön készíthetsz világos/sötét/gyengén látók/stb. kinézetet, amit gombnyomásra cserélgethetsz.
    Mutasd a teljes hozzászólást!
  • Készítettem egy mini appot Neked igaz ez c# nem vb de le tudod fordítani, zéró kód az egész, ami illusztrálja, hogy miként kell örököltetni és használni a témákat. Három téma van
    • Dark.xaml (ez az alap)
    • Light.xaml
    • HighContrast.xaml
    A Themes könyvtár található. Ezek a Base.xaml gyerekei, ugyan csak a Themes könyvtárnban.

    Az App.xaml fájlban csak ez van:
    <ResourceDictionary Source="Themes/Dark.xaml"/> (ez az alap)

    A MainWindow.xaml és a MainWindow.xaml.cs pedig magáért beszél. H1, H2, H3 örököltetve a Label-ből és ezeket formázom a különböző témákban.

    A Button és Click pedig alap. Ami abban található az csak 
    Application.Current.Resources.MergedDictionaries.Clear és
    Application.Current.Resources.MergedDictionaries.Add gombhoz tartozó téma.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Her Dr BadBull, Valami nem jó a válaszban?
    Mutasd a teljes hozzászólást!
  • Üdv!

    Bocs hogy csak most ... s köszönöm a szándékod!
    Részemről XAML resources ként definiáltam.
    A keresés nem az alkalmazás erőforráskeresőjeével történik hanem a "keretelem" -ével (FrameworkElement.FindResource).
    Csak gyanítom de vagy a névterekkel van a bibi vagy az egyedi vezérlő osztály tekintetében nem a megszokott módon érvényesül az erőforrás keresési metódus (
    Public Class MyListBoxItem Inherits ListBoxItem
    " ... the parent element in the logical tree is searched next, then the application ...")

    Nem volt gond áthidalni s ha majd lesz időm jobban utánakutakodom ...

    Üdv!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd