web-dev-qa-db-fra.com

comment lier la largeur de l'élément enfant à la largeur de l'élément parent dans silverlight

J'ai une grille dont la largeur est "1 *". Donc, la largeur réelle décidée au moment de l'exécution, je pense que… .. Dans cette grille, j'ai une autre grille dont je veux définir la largeur comme largeur d'exécution de la grille parente. Comment puis-je faire cela dans xaml en liant.

41

Cela vous aidera vraiment je suppose

Width="{Binding ActualWidth, ElementName=parentElementName}"

Cela lie la largeur à l’élément parent ou au nom de l’élément fourni

97
Anobik

C'est une solution générique qui peut fonctionner partout. Vous n'avez pas besoin d'écrire le nom de l'élément parent. Cela identifiera son parent et prendra la largeur du parent.

Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"
27
Rudresh Bhatt

Je pense que la meilleure façon de faire la même chose est de:

HorizontalAlignment="Stretch"

Ce n'est pas en utilisant la liaison comme on vous l'a demandé, mais c'est plus facile.

17
RockLegend

Si vous le faites dans CodeBehind, cela fonctionne pour moi. Cela présente l'avantage supplémentaire que bindMe ne doit pas nécessairement être un enfant de toMe:

public static void BindWidth(this FrameworkElement bindMe, FrameworkElement toMe)
{
  Binding b = new Binding();
  b.Mode = BindingMode.OneWay;
  b.Source = toMe.ActualWidth;
  bindMe.SetBinding(FrameworkElement.WidthProperty, b);
}

usage:

child.BindWidth(parent);
3
William Jockusch
 Width="{Binding Width, RelativeSource={RelativeSource AncestorType={x:Type Parent}, Mode=FindAncestor}}"

si les deux contrôles DataContext est différent.

2
Gaurav Panwar

Si c'est dans un modèle, utilisez ceci:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <Image Width="{TemplateBinding Width}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Source="TestImage.png"/>
                <TextBlock HorizontalAlignment="Center" Text="Test Text"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
0