Question

J'ai deux contrôles personnalisés analogues à un nœud et le contrôle qui établit des liens entre les nœuds.

J'aimerais que les deux contrôles soient écrits autant que possible en xaml. Le lien stocke les deux nœuds en tant que propriétés de dépendance et j’utilise la liaison de données pour déplacer la ligne entre les nœuds à chaque déplacement des nœuds.

Il serait intéressant de pouvoir modifier une autre valeur de la ligne, par exemple la largeur du trait, en fonction de la distance entre les deux nœuds. La propriété doit donc être mise à jour lorsque l'un des nœuds est déplacé, et je ne comprends pas très bien comment cela fonctionnerait.

Quelqu'un a des idées?

Était-ce utile?

La solution

vous pouvez essayer de faire quelque chose comme ça:

  1. comme dans l'article précédent, définissez une propriété width, stroke (tout ce dont vous avez besoin) sur votre classe de liens
  2. définir une liaison multiple appliquée à cette propriété, en passant vos deux nœuds à la liaison cela devrait ressembler à:
  

< Convertisseur de liaisons multiples = " {Convertisseur StaticResource} " >
   < Binding Path = & "Node1 &"; RelativeSource | Source ... / & Gt;
   < Binding Path = & "Node2 &"; ... / >
  < / Multibinding >

  1. Implémentez l'interface IMultiValueConverter, qui calculera à quoi le trait devrait ressembler en fonction de la distance entre les nœuds.

  2. dans xaml, créez une instance de votre convertisseur et ajoutez-la à la propriété Converter de votre liaison multiple.

L'avantage de cette solution est que vous avez un modèle de classe assez clair et que chaque classe effectue des tâches simples. de plus, vous pourrez par la suite configurer votre classe de convertisseur pour prendre en charge les cas supplémentaires sans toucher à la classe de noeud qui reste simple et qui est conçue simplement pour afficher des noeuds.

En général, chaque fois que vous devez mapper plusieurs valeurs de propriété sur une autre propriété, vous devez utiliser la liaison multiple et le convertisseur.

Autres conseils

Vous pouvez définir une propriété StrokeWidth dans votre classe de liens, qui est calculée chaque fois que les nœuds sont déplacés, puis y lie la propriété de style appropriée.

Je suppose que vous pouvez également essayer de faire quelque chose avec DataTriggers, mais ils ont besoin de valeurs spécifiques pour fonctionner avec - vous ne pouvez utiliser aucun type d’expression. Cela rendrait difficile l’adaptation de la solution à un large éventail de distances entre les nœuds.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top