2008-11-21 19 views
1

Dites que j'ai un contrôle utilisateur comme celui ci-dessous, comment lierais-je quelque chose au ActualWidth de la grille "G1" depuis l'extérieur du contrôle?Liaison à un élément dans un UserControl

<UserControl x:Class="Blah"> 
    <WrapPanel> 
    <Grid x:Name="G1"> 
     ... 
    </Grid> 
    <Grid> 
     ... 
    </Grid> 
    </WrapPanel> 
</UserControl> 
+0

Que voulez-vous dire par 'hors de G1' - Du même fichier XAML ou du code derrière? –

+0

si vous utilisez le contrôle dans un autre fichier XAML – MJS

Répondre

1

Si vous voulez lier à un contrôle externe où vous utilisez ce contrôle utilisateur, déclarez une DependencyProperty à votre code UserControl derrière, puis associez G1 à cette propriété. Et lier la propriété du contrôle externe à DependencyProperty UserControl. C'est comme un 2 niveau d'indirection.

+0

mais ActualWidth ne liera pas de cette manière? – MJS

+0

une question connexe: http://stackoverflow.com/questions/313124/wpf-usercontrol-expose-actualwidth – MJS

1

Si vous voulez dire avec en dehors du contrôle, non pas comme contenu du contrôle, vous pouvez utiliser ElementName dans la liaison comme ceci:

{Binding ElementName=G1, Path=ActualWidth} 

Si vous voulez dire en dehors du contrôle dans un autre fichier XAML, vous pouvez essayez d'utiliser la propriété Path si votre commande est dans le cadre de l'autre contrôle:

{Binding ElementName=ParentControl, Path=G1.ActualWidth} 

Cependant, je déconseillerais cette conception, parce que vous pouvez changer le nom de G1 un jour, et vous ne savez jamais de toutes les liaisons qui pourraient casser.

+0

{Binding ElementName = ParentControl, Path = G1.ActualWidth} ne fonctionne pas et le contrôle est dans la portée - Je peux voir la largeur réelle de l'ensemble du contrôle. – MJS