User control ve WPF   zodpovězená otázka

VB.NET, WPF

Zdravím,

trošku jsem pokročil ve WPF co se týká grafické podoby controlů a tak jsem si chtěl pomocí UserControl vytvořit svoje tlačítko. Vložil jsem tedy do projektu userControl se jménem UButtonStandart a nastavil vzhled. Potud je vše ok.

Problém je však s nastavením některých property.

Pomocí triggeru spouštím při najetí na button barevnou animaci složenou ze dvou barev. Pokud vložím názvy dvou barev přímo do setteru je vše ok. Já ale chci, aby si programátor při vložení tlačítka mohl tyto barvy zvolit. Přidal jsem tedy do tohoto userControlu dvě nové vlastnosti color1 a color2 typu string (protože jména se ve WPF zadávají stringovým názvem).

Takže třída uvnitř vypadá takto:

Public Class UButtonStandart

    Private _color1 As String = "Blue"
    Private _color2 As String = "Black"



    Public Property Color1 As String
        Get
            Return _color1
        End Get
        Set(ByVal value As String)
            _color1 = value
        End Set
    End Property


    Public Property Color2 As String
        Get
            Return _color2
        End Get
        Set(ByVal value As String)
            _color2 = value
        End Set
    End Property

End Class

Když ve WPF vložím tlačítko, z VB kódu se na tyto property bez problémů dostanu. Problém ale je, že netuším jak se na ně dostat z triggeru. Když zkusím použít binding jako u jiné komponenty, hlásí mi to chybu a hodnotu to nenajde.

Zde jsou hodnoty nastavené natvrdo a animace funguje:

<Border.Background>
    <RadialGradientBrush>
        <RadialGradientBrush.RelativeTransform>
            <TransformGroup>
                <ScaleTransform ScaleX="1.702" ScaleY="2.243"/>
                <SkewTransform AngleX="0" AngleY="0"/>
                <RotateTransform Angle="0"/>
                <TranslateTransform X="-0.368" Y="-0.152"/>
            </TransformGroup>
        </RadialGradientBrush.RelativeTransform>
        <GradientStop Color="Gold" Offset="0"/>
        <GradientStop Color="Black" Offset="1"/>
    </RadialGradientBrush>
</Border.Background>

a já bych potřeboval změnit řádky:

<GradientStop Color="Gold" Offset="0"/>
<GradientStop Color="Black" Offset="1"/>

na něco jako:

<GradientStop Color="{Binding ElementName=UButtonStandart,Path=Color1}" Offset="0"/>
<GradientStop Color="{Binding ElementName=UButtonStandart,Path=Color2}" Offset="1"/>

To ale nefunguje. Možná mám špatně ElementName, zkouším tam psát název třídy (UButtonStandart) což je ten UserControl ve kterém jsou nadefinované property Color1 a Color2. Odkazuji se na třídu a ne na konkrétní instanci.

Pokud se odkážu např. na konkrétní textBox který je umístěn na formu a do kterého píšu názvy barev, tak to bez problémů funguje:

<GradientStop Color="{Binding ElementName=TextBoxColor1,Path=Text}" Offset="0"/>
<GradientStop Color="{Binding ElementName=TextBoxColor2,Path=Text}" Offset="1"/>

A pak ještě kdyby někdo věděl jak se v bindingu dostat na proměnou která je třeba nadeklarovaná ve formuláři MainWindow.

(Např. na formuláři mainWindow mám proměnou IsRunning typu boolean a já chci aby její změna spouštěla trigger). Pokud na form umístím label, tak bez problémů dokážu reagovat na změnu textu v labelu, ale dostat se na proměnou je problém...

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

Vlastnosti se ve WPF deklarují jinak, aby na nich fungovaly bindingy a triggery - musíš použít Dependency Property. Je na to tuším code snippet propdp, stačí to napsat a dát tabulátor.

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

Díky, to je ono. Sice jsem to ještě nerozběhal uplně podle mých představ ale tohle je dobrý cesta.

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