Avatar
Jakub Lásko[Saarix]:

Zdravím, dělám na globální stylu pro WPF appku, ale mám problém při stylizování buttonu. Button sem nastylizoval jak jsem potřeboval, ale jakmile mu chci přidat ještě animaci po najetí myší, tak dostávám error o tom že se odkazuji na proměnnou, kterou také nastavuje Setterem, což nejde, ale nevím jakou jinou praktiku zvolit abych tu animaci rozchodil u všech buttonů v aplikaci.

Kód:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    x:Class="Drepix_ForeignWords.ResourcesEvents">

    <Style TargetType="Button" x:Key="ButtonStyle">
        <!-- Basic style -->
        <Setter Property="Background" Value="#FF29549E" />
        <Setter Property="BorderBrush" Value="#FF272222" />
        <Setter Property="BorderThickness" Value="2" />
        <Setter Property="RenderTransform">
            <Setter.Value>
                <TransformGroup>
                    <ScaleTransform CenterX="38" CenterY="11" x:Name="traScale" />
                </TransformGroup>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="traScale"
                                         Storyboard.TargetProperty="ScaleX"
                                         To="1.2" Duration="00:00:00.8" />
                        <DoubleAnimation Storyboard.TargetName="traScale"
                                         Storyboard.TargetProperty="Scaley"
                                         To="1.2" Duration="00:00:00.8" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            <EventTrigger RoutedEvent="MouseLeave">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="traScale"
                                         Storyboard.TargetProperty="ScaleX"
                                         To="1" Duration="00:00:00.8" />
                        <DoubleAnimation Storyboard.TargetName="traScale"
                                         Storyboard.TargetProperty="Scaley"
                                         To="1" Duration="00:00:00.8" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

</ResourceDictionary>

Nejspíše bych to viděl na to, že ten traScale budu muset pro ty všechny buttony přidávat programově a ne zde v tom stylu, aby se to nebilo.

Odpovědět 21.7.2014 8:58
Časem je vše možné.
Avatar
Jakub Lásko[Saarix]:

Ještě zde dodávám error:

Error   1  TargetName property cannot be set on a Style Setter. Line 22 Position 42.
Editováno 21.7.2014 9:00
Nahoru Odpovědět 21.7.2014 9:00
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
sadlomaslox25:
<Style TargetType="Button" >
    <!-- Basic style -->
    <Setter Property="Background" Value="#FF29549E" />
    <Setter Property="BorderBrush" Value="#FF272222" />
    <Setter Property="BorderThickness" Value="2" />
    <Setter  Property="RenderTransform">
        <Setter.Value>
            <TransformGroup>
                <ScaleTransform CenterX="38" CenterY="11" />
                </TransformGroup>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <EventTrigger RoutedEvent="MouseEnter">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation
                             Storyboard.TargetProperty="RenderTransform.(TransformGroup.Children)[0].ScaleX"
                             To="1.2" Duration="00:00:00.8" />
                    <DoubleAnimation
                             Storyboard.TargetProperty="RenderTransform.(TransformGroup.Children)[0].ScaleY"
                             To="1.2" Duration="00:00:00.8" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeave">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation
                             Storyboard.TargetProperty="RenderTransform.(TransformGroup.Children)[0].ScaleX"
                             To="1" Duration="00:00:00.8" />
                    <DoubleAnimation
                             Storyboard.TargetProperty="RenderTransform.(TransformGroup.Children)[0].ScaleY"
                             To="1" Duration="00:00:00.8" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>

odkaz se relativne viz kod

 
Nahoru Odpovědět  +1 21.7.2014 16:58
Avatar
Odpovídá na sadlomaslox25
Jakub Lásko[Saarix]:

Díky moc to mě nenapadlo. Už to frčí jak má :-)

Nahoru Odpovědět 22.7.2014 10:50
Časem je vše možné.
Avatar
pcrewik
Člen
Avatar
Odpovídá na Jakub Lásko[Saarix]
pcrewik:

a ako si docieli toho, aby to používala celá aplikacia?
Ja som si vytvoril nový súbor style.xml, a do toho som si skopíroval ten sadlomaslox25-ov kód, síce to spustilo aplikáciu ale nezaznamenal som ziadnu zmenu oproti tomu ako to bolo predtým

 
Nahoru Odpovědět 22.7.2014 22:16
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na pcrewik
patrik.valkovic:

Nemůžeš to dávat do XML souboru ale do resources. Pokud chceš, aby to používala celá aplikace, tak do application.re­sources

Nahoru Odpovědět 22.7.2014 22:21
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Posix
Člen
Avatar
Odpovídá na pcrewik
Posix:

a když to dáš do Themes/Generic­.xaml, tak to nejde?

Nahoru Odpovědět 22.7.2014 22:34
Proč to dělat jednoduše, když to jde složitě.
Avatar
pcrewik
Člen
Avatar
pcrewik:

klikol som v solution explorer add resource dictionary a pridal som resource dictionary (WPF) , spustilo sa to bez zmeny, ako mám pridat do application.re­sources?

 
Nahoru Odpovědět 22.7.2014 22:40
Avatar
Odpovídá na pcrewik
sadlomaslox25:

ve wpf funguje tzv. visual tree, coz znamena ze vsechny gui komponenty co zobrazujes maji svoje predky a potomky (zjednodusene; aplikace->okno->listbox->polozka listboxu->tlacitko co je kaznem radku listboxu).
styl funguje tak ze pokud u neho neuvedej x:Key tak se aplikuje na vsechny elementy ktere jsou TargetType od mista, kde si definoval tento styl v Resources (zjednodusene kazdy prvek ma vlastnost Resources, kde muzes umistit dany styl a od tohoto mista smerem dolu ve wpf stromu se provadi aplikace stylu). kdyz chces aby neco bylo pouzite v cele aplikaci tak to das do souboru App.xaml do Resources.

 
Nahoru Odpovědět  +1 22.7.2014 22:41
Avatar
pcrewik
Člen
Avatar
Odpovídá na Posix
pcrewik:

a kde mam moznost pridat do themes?

 
Nahoru Odpovědět 22.7.2014 22:56
Avatar
Posix
Člen
Avatar
Odpovídá na pcrewik
Posix:

normálně složka Themes, soubor Generic.xaml, kde bude ResourceDictionary se stylem

Nahoru Odpovědět 22.7.2014 23:25
Proč to dělat jednoduše, když to jde složitě.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Posix
Jan Vargovský:

Když přidáš CustomControl, tak se ti to vytvoří samo. Nebo můžeš přímo přidat Resource Dictionary.

EDIT: Má to být odpověď na pcrewik

Editováno 23.7.2014 1:20
 
Nahoru Odpovědět 23.7.2014 1:19
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 12 zpráv z 12.