WPF - ControlTemplate - jak zachovat styl   zodpovězená otázka

WPF

Z nějkého důvodu potřebuji svůj vlastní button (mohl by být třeba ve tvaru elipsy)

 <ControlTemplate TargetType="{x:Type Button}" >
            <Grid   >
                <Rectangle  Fill="{TemplateBinding Background}"  Stroke="{TemplateBinding BorderBrush}"/>
                    <ContentPresenter Margin="2"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter  Property="Opacity" Value="0.7" />
                    <Setter Property="Foreground" Value="Gray" />
                </Trigger>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter  Property="Background" Value="#FF94C5F5" />
                    <Setter Property="BorderBrush" Value="Blue" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

Pokud vynechám část s trigrama, tak tlačítko bude ve zmražené polože vypadat stejně a při najetí se jeho barva nezmění...

Já bych ale potřeboval nějak tlačítku říct, že se má chovat stejně jako normální tlačítko...Nevím, co všechno mám TemplateBindovat a ani nevím čím.. (defaultní tlačítko má například takový lesklý efekt)..

Jak toho docílím bez spousty triggerů?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud potřebujete vytáhnou pro úpravu výchozí styl tlačítka, tak na to je nejlepší použit Blend. V něm z toolboxu vložte na pracovní plochu Button, a na něm zvolte volbu context menu Edit Template / Edit a Copy. V dialogu zvolíte umístění do nového resource dictionary souboru. Tím Blend vygeneruje výchozí styl, který následně můžeme upravovat ať už přímo v blendu nebo pouze v XAML kódu. Druhou možností je vykopírovat styl ze souborů v C:\Program Files (x86)\Microsoft Visual Studio 11.0\Blend\SystemThemes\Wpf, které Blend na výchozí styly používá.

Ale pozor na to, že výchozí styly jsou závislé na tom, jaký operační systém se používá, celkem už ve WPF existuje 8 různých stylů pro každý kontrol (Classic, Luna, Luna Olive Green, Luna Silver, Royale, Aero, Aero2, AeroLite). Takže pokud do aplikace potřebujete jen trochu pozměnit výchozí styl nějakého běžného controlu (ve vašem případě tlačítka), tak by jste správně měl implementovat všech 8 stylů. Více o tom mám popsáno zde http://blog.imp.cz/post/2012/12/28/Windo....

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Nedávno jsem řešil dost podobnou věc.

"if you overwrite the ControlTemplate, you get rid of all default behaviours, but you have to define the complete layout including all behaviours on your own."

Takže je mi líto, ale nějak jednoduše to nejde.

Já jsem to vyřešil stažením xaml popisu tlačítka (microsoft to má někde na msdn) a jeho upravením podle mích potřeb.

Psát to celé sám, tak to zabere hodně času.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, i to hloupé tlačítko je celkem složité, pokud chcete implementovat focus, enabled/disabled, reakce na myš atd.

Vyexportovat a upravit existující šablonu v Blendu je asi cesta nejmenšího odporu - nejsložitější na tom je pochopit, co ta šablona dělá a co je co. Ale pokud se v tom člověk trochu zorientuje, dá se to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback