wake-up-neo.com

so binden Sie die Breite des untergeordneten Elements an die Breite des übergeordneten Elements in Silverlight

Ich habe ein Gitter, dessen Breite "1 *" ist. Ich denke also, dass die tatsächliche Breite zur Laufzeit entschieden wird ... In diesem Gitter habe ich ein anderes Gitter, dessen Breite ich auf die Laufzeitbreite des übergeordneten Rasters einstellen möchte. Wie kann ich das in xaml durch Bindung tun?.

Das wird dir tatsächlich helfen, denke ich

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

Dadurch wird die Breite an das übergeordnete Element oder den angegebenen Elementnamen gebunden

97
Anobik

Dies ist eine generische Lösung, die überall funktionieren kann. Sie müssen keinen übergeordneten Elementnamen schreiben. Dies identifiziert das übergeordnete Element und nimmt dessen Breite ein.

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

Ich denke, der einfachste Weg, das Gleiche zu tun, ist:

HorizontalAlignment="Stretch"

Das ist nicht verbindlich, wie Sie gefragt wurden, aber es ist einfacher.

17
RockLegend

Wenn Sie es in CodeBehind tun, funktioniert das für mich. Es hat den zusätzlichen Vorteil, dass bindMe kein Kind von toMe sein muss:

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);
}

verwendungszweck:

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

wenn beide Steuerelemente DataContext unterschiedlich sind.

2
Gaurav Panwar

Wenn es sich in einer Vorlage befindet, verwenden Sie Folgendes:

<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