WPF Frame jako WebBrowser

Berte tento příspěvek spíše jako pomyslné nakousnutí jablka, ve kterém se snažím odhalit, zda obsahuje červa, nebo je čisté a já mám jen špatnou chuť.

V jedné aplikaci, kterou vyvíjím ve WPF verze 3.0 jsem byl nucen přistupovat k webovým stránkám. Moje rozhodnutí tak padlo na Element Frame, kterým je možné zpřístupnit HTML obsah. Jelikož se mi však nelíbila navigační tlačítka – spíše nezapadla do vizuálního prostředí aplikace – skryl jsem tato pomocí vlastnosti NavigationUIVisibility.

Navigace na první stránku pak probíhá programově a z této úvodní stránky se již uživatel může rozhodnout sám, jakým směrem se vydá a po jakém linku budou vést jeho cesty. Důležité je v této chvíli říct, že bylo zapotřetí uživateli dát možnost se vrátit zpět na onu výchozí stránku.

To jsem si říkal, že bude velice jednoduché a jednoduše provedu programové volání metody Navigate(). Zde jsem však nečekaně narazil. Při debugu jsem poté zjistil, že Frame stále obsahuje ve vlastnosti Uri programově zadanou výchozí stránku, byť je zobrazena stránka jiná. Obdobně je na tom i NavigationService vlastnost. Zde se však objevil první rozpor, jelikož je nastavena vlastnost CanGoBack na hodnotu true, signalizující, že je možné přejít zpět – a to přesto, že URL se nikterak nezměnilo, kdežto obsah stránky ano. Stejně tak byly marné jakékoli pokusy vyvolat akci typu GoBack() nad Framem.

V Content je schován WebBrowser

Mé pátrání tak pokračovalo dále a zjistil jsem, že ve vnořené vlastnosti Content pro NavigationService je vložen objekt WebBrowser, ano ta komponenta, která se nachází v .net 2.0 pro WinForms, a je tak hostovaná v prostředí WPF. Po několika pokusech jsem pak zjistil, že právě tento WebBrowser je ochoten reagovat na moje příkazy.

Stačilo tedy jednoduché přetypování a získání WebBrowseru a jednoduchá práce přímo s tímto objektem.

Ouha

Přišla tedy na řadu kompilace a distribuce nové verze aplikace. Jenže ouha, vypadá to, že se něco nepovedlo. V průběhu několika málo okamžiků jsem měl ve své email schránce znění Exception chyby

Could not load type 'System.Windows.Controls.WebBrowser' from assembly 'PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

Což mě přiznám se maličko, no dost, zarazilo a jsem v rozpacích, kde je co špatně. Jelikož zde bohužel platí ono známe “Works on my machine.

Řešení

Vhodné řešení tohoto problému jsem zatím nenašel. Moje cesta se začala ubírat jiným směrem a na řadu přišlo náhradní řešení, které určitě není optimální. Ještě bych asi měl podotknout, že cílový počítač obsahuje IE6.0 + SP. Věděl by někdo, jakým směrem se vydat v případném dalším bádání?

1 Comment

  • tomas said

    ahoj,

    Ja mam vytvorenou celou aplikaci v C++ a je funkcni. Cilem bylo vytvorit aplikaci podobnou IE s omezenou funkcionalitou.

Add a Comment