WPF - Vlastní Dependency Property   otázka

C#, WPF

Ahoj, potřeboval bych poradit. Vytvářím si vlastní Control skládající se z TextBoxu a Rectangle pojmenovanou jako InputBox.

K tomu vytvářím vlastní vlastnost "RectangleFill", která bude měnit barvu obdelníčku v tomto objektu. Jak provázat vytvořenou vlastnost s vlastností Rectangle.Fill?

Můj C# kód pro novou vlastnost je následující

    public partial class InputBox : UserControl
    {
        public readonly DependencyProperty RectangleFillProperty = DependencyProperty.Register("RectangleFill", typeof(Brush), typeof(InputBox));
        public Brush RectangleFill 
        {
            get
            {
                return GetValue(RectangleFillProperty) as Brush;
            }

            set
            {
                SetValue(RectangleFillProperty, value);
            }
        }


        public InputBox()
        {
            InitializeComponent();
        }
    }

a XAML kód pro obdelník mám

<Rectangle Width="30" Height="30" Fill="{Binding Path=RectangleFill, FallbackValue=Red, Mode=TwoWay}" />

Předem děkuji za pomoc.

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

Chybí vám tam metadata a k nim náležící procedura volající změnu property.

Code:

    public partial class UserControl1 : UserControl
    {

        public static DependencyProperty RectangleFillProperty =
            DependencyProperty.Register("RectangleFill",typeof (Brush),typeof (UserControl1),
                                         new PropertyMetadata(Brushes.Transparent,OnRectangleFillChanged));

        private static void OnRectangleFillChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var ctrl = d as UserControl1;
            if (ctrl == null) return;
            ctrl.RectangleFill = (Brush)e.NewValue;
        }

        public Brush RectangleFill
        {
            get { return (Brush)GetValue(RectangleFillProperty); }
            set { SetValue(RectangleFillProperty, value); }
        }

        public UserControl1()
        {
            InitializeComponent();
        }

    }

Xaml:

<UserControl x:Class="WpfApplication1.UserControl1"
             x:Name="This"
             ..........>
......        
        <Rectangle Fill="{Binding RectangleFill, ElementName=This, FallbackValue=Red}" />
......

</UserControl>
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Paráda, už mi to funguje. Mnohokrát děkuji! :)

Ještě bych se chtěl zeptat, jak bych mohl pro nějakou property nastavit její možné hodnoty, např. pokud budu mít property: Choice, budu mít po napsání Choice=" na výběr dvě hodnoty: Agree a Disagree.

Technicky vzato potřebuju udělat něco jako HorizontalAlignment property a vytvořit k tomu ty možnosti (Left, Center, Right, ...)

Děkuji.

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

K tomu by mělo stačit nadefinovat enum:

public enum Choice
{
    Agree = 1,
    Disagree = 0
}

a danou depencency property udělat typu tohoto enumu (tj. typeof(Choice)).

Intelisense v XAML editoru by pak měl automaticky nabízet výběr z možných hodnot enumu.

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