Bonjour

Je chercher à écrire une propriété complexe dans un contrôle Xaml sous UWP.
Le but est de pouvoir écrire ce type de code Xaml:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
<local:MovementControl x:Name="TestControl" Begin="1,2"/>
La propriété complexe est ici Begin et la valeur complexe est "1,2" qui représente une position {X=1 ; Y=2}.

J'ai essayé d'utiliser System.ComponentModel.TypeConverter, comme en WPF où ça marche très bien, mais même après avoir avoir ajouté le paquet NuGet "System.ComponentModel.TypeConverter", il semble que xaml ne prenne pas en compte le TypeConverter.

J'obtient ces erreurs de compilation dans le code Xaml:
1: Cannot assign text value '1,2' into property 'Begin' of type 'Position'
2: Le TypeConverter de "Position" ne prend pas en charge la conversion à partir d'une chaîne.

Le concepteur Xaml indique, pour sa part, la dernière erreur.

Existe-t-il un moyen avec UWP d'écrire des propriétés complexes ?

Pour info, voici mon code C#:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
    [TypeConverter(typeof(PositionConverter))]
    public class Position
    {
        public int X;
        public int Y;
        public override string ToString() { return X + "," + Y; }
    }
 
    public class PositionConverter : TypeConverter
    {
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            return sourceType == typeof(string);
        }
 
        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            if (value is string)
            {
                var coords = ((string)value).Split(',');
                return new Position() { X = int.Parse(coords[0]), Y = int.Parse(coords[1]) };
            }
            return base.ConvertFrom(context, culture, value);
        }
    }
 
    public class MovementControl : TextBox
    {
        public static readonly DependencyProperty BeginProperty
    = DependencyProperty.Register("Begin", typeof(Position), typeof(MovementControl), new PropertyMetadata(new Position()));
        public Position Begin
        {
            get { return (Position)GetValue(BeginProperty); }
            set
            {
                SetValue(BeginProperty, value);
                base.Text = value.ToString();
            }
        }
 
        public MovementControl()
        {
            this.Loaded += MovementControl_Loaded;
        }
        private void MovementControl_Loaded(object sender, RoutedEventArgs e)
        {
            base.IsReadOnly = true;
            base.Text = this.Begin.ToString();
        }
    }
Si quelqu'un connait un équivalent à TypeConverter pour le xaml d'UWP, merci d'avance.

Chris

P.S.
1. Je ne cherche pas des contournements avec des liaisons ou autre syntaxe xaml complexe. Le code xaml doit rester simple comme l'exemple que j'ai donné (et qui marche très bien en WPF, d'ailleurs):
Begin="1,2"
2. L'exemple que je donne a été créé de toutes pièces pour expliquer simplement ce que je désire obtenir, mais mon but est très généraliste. C'est aussi pourquoi je ne demande pas de contournements, mais bien une technique équivalente à ce qui existe en WPF, si elle existe.
3. J'ai essayé de mettre des opérateurs implicite pour transcoder le type complexe (Position) vers et à partir de String, mais xaml ne les prend pas en compte.
4.Testé avec VS 2015 sous Windows 10.