Avatar
Honza
Člen
Avatar
Honza:

Ahoj,

chtěl bych ve WPF upravit vzhled kalendáře. V blendu jsem si ho "rozebral" na prvočinitele a upravil dle svých představ (btw. jedná se pouze o odstranění jednoho vnitřního rámečku, zbytek kalendáře zůstane stejný), ale teď nevím kde mám ve svém projektu tento styl definovat, aby byl použitelný v rámci celé aplikace.

Nejdřív jsem zkusil vytvořit userControl kde tento styl aplikuju. To sice funguje, jenže když přidám můj kalendář na formulář tak je typu UserControl a ne Calendar. To má za následek to, že příjdu o možnost nastavení vlastností typických pro kalendář a taky o jeho eventy (zůstanou tam jen nějaké obecné pro userControl).

Pak jsem přišel na to že když přidám styl do souboru App.xaml jako application resources tak to funguje jak má. Jenže při větším počtu Controls které upravím tento soubor dost nabobtná a bude strašně nepřehledný. Bylo by ideální kdybych si mohl vytvořít pro každý control vlastní soubor ve kterém by byl definovaný jeho styl a na něj se pak mohl odkazovat, jenže nemůžu nikde najít jak by se to správně mělo udělat.

Díky

Odpovědět 18.7.2014 10:55
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Honza
Člen
Avatar
Odpovídá na Honza
Honza:

Nakonec jsem našel řešení zde:

http://stackoverflow.com/…-file-in-wpf

Místo userControl použiji ResourceDictionary na které přidám odkaz v App.xaml

Narazil jsem na něj už dřív, ale špatně jsem pochopil jeho použití.

Nahoru Odpovědět 18.7.2014 11:31
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Odpovídá na Honza
Jakub Lásko[Saarix]:

Mohl by jsi to stále používat jako UserControl, protože v tom user control budeš stejně muset mít instanci toho kalendáře.

Příklad

myControl.Calendar.Date = xxx;

Nebo ve WPF lze využít Resources a nebo si udělat template a ten aplikovat.

Příklad

<ResourceDictionary.MergedDictionaries>
  <ResourceDictionary Source="Shared.xaml" />
</ResourceDictionary.MergedDictionaries>

A v tom filu Shared by jsi měl vlastně nadefinované styly v resources.

Nahoru Odpovědět 18.7.2014 11:35
Časem je vše možné.
Avatar
Honza
Člen
Avatar
Odpovídá na Jakub Lásko[Saarix]
Honza:

No já to nakonec udělal tak jak to je popsané v tom článku.
Udělal jsem si pojmenovany Style, který jsem vložil do ResourceDictionary (pro každy Style mám vlastní ResourceDicti­onary).

Všechny ResourceDictionary jsem vložil do application resources v App.xaml:

<Application.Resources>

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ControlsTemplates\StyleButton.xaml" />
            <ResourceDictionary Source="ControlsTemplates\StyleCalendar.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>



</Application.Resources>

No a když potřebuju kdekoli styl aplikovat, tak to použiju jako style:

<Calendar Style="{StaticResource MyStyleCalendar}" />

Zatím se to tváří jako že je všechno ok i bez použití userControl, tak uvidím jestli nenarazím později na nějaký problém.

Editováno 18.7.2014 12:29
Nahoru Odpovědět  +1 18.7.2014 12:26
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Odpovídá na Honza
Jakub Lásko[Saarix]:

No jasně, takhle je to nejlepší, taky to takto používám u sebe v App. :-)

PS. Jen nemusíš používat pro každý style nový ResourceDictionary stačí pouzít TargetType property na rozdělení.

Editováno 18.7.2014 14:03
Nahoru Odpovědět 18.7.2014 14:01
Časem je vše možné.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.