2010-03-30 5 views
0

Nous devons créer dynamiquement (c'est-à-dire pendant l'exécution, via code-behind) les UserControls et les positionner sur un canevas. Nous souhaitons lier la position (Canvas.Left et Canvas.Top) et la largeur de ces contrôles utilisateur (!) Et draggable (!) À une collection Observable <>. Cette mesure lorsque l'utilisateur fait glisser ou redimensionne le contrôle, la source de données est automatiquement mise à jour.Liaison de la position et de la taille d'un UserControl dans un canevas dans WPF

Comment pourrions-nous y parvenir si le contrôle Usercontrol est contenu dans un DataTemplate qui est à son tour utilisé par un ListBox dont le DataContext est défini sur la collection à laquelle nous voulons nous lier? En d'autres termes, comment lier la position et la taille d'un contrôle qui n'existe pas en XAML, mais uniquement en code (parce qu'il est créé en cliquant et en faisant glisser la souris)?

Notez que la collection peut être vide ou non vide, ce qui signifie que la taille et la position stockées dans la source de données doivent être correctement liées pour que UserControl puisse être dimensionné et positionné correctement dans Canvas via DataBinding. Est-ce possible?

Répondre

0

Avez-vous essayé d'utiliser une liaison Mode=TwoWay?

<YourUserControl 
    Canvas.Top="{Binding TopProperty, Mode=TwoWay}" 
    Canvas.Left={Binding LeftProperty, Mode=TwoWay}" 
    Height="{Binding HeightProperty, Mode=TwoWay}" 
    Width="{Binding WidthProperty, Mode=TwoWay}" /> 

Je ne suis pas convaincu dans les deux sens de liaison fonctionnera avec Redimensionner ou glisser-déposer des opérations, mais il n'y a qu'une seule façon de le savoir.

+0

Merci pour votre aide. Ceci est intéressant. Quelle est la propriété TopProperty ou LeftProperty dans la liaison dans votre exemple? Est-ce que Canvas.Left et Canvas.Top ou UserControl.Left et USerControl.Top? Je n'ai pas encore réussi à faire ce travail, et encore moins la liaison TwoWay. – John

+0

Après un peu plus d'essais et d'erreurs cela fonctionne réellement. TwoWay prendra soin de la source de données lorsque la mosue déplace ou redimensionne le UserControl. Merci!! – John

+0

TopProperty et LeftProperty sont les propriétés de votre source de données que vous souhaitez conserver en synchronisation. Heureux de l'entendre travaillé! – CMerat

Questions connexes