Подтвердить что ты не робот

Как связать ширину дочернего элемента с шириной родительского элемента в silverlight

У меня есть сетка, ширина которой "1 *". Так что фактическая ширина определяется во время работы, я думаю. Внутри этой сетки у меня есть еще одна сетка, ширина которой я хочу установить на ширину рабочей среды родительской сетки. Как я могу это сделать в xaml через привязку.

4b9b3361

Ответ 1

Это действительно поможет вам, я думаю,

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

Это связывает ширину с родительским элементом или предоставленным именем элемента

Ответ 2

Это общее решение, которое может работать везде. Вам не нужно будет писать имя родительского элемента. Это будет определять его родительский элемент и будет занимать родительскую ширину.

Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"

Ответ 3

Я думаю, что самый простой способ сделать то же самое:

HorizontalAlignment="Stretch"

Это не использует привязку, как вы просили, но это проще.

Ответ 4

Если вы делаете это в CodeBehind, это работает для меня. Он имеет дополнительное преимущество: bindMe не должен быть дочерним элементом 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);
}

использование:

child.BindWidth(parent);

Ответ 5

 Width="{Binding Width, RelativeSource={RelativeSource AncestorType={x:Type Parent}, Mode=FindAncestor}}"

если оба элемента управления DataContext отличается.

Ответ 6

Должно ли это решение работать с WPF? Я протестировал его и обнаружил, что это нормально для расширения. Когда я попытался масштабировать окно назад, моя сетка, содержащаяся в стеке, как правило, поддерживала максимальный размер.

<StackPanel Name="stackPanelClassifiers" Orientation="Horizontal" Background="cyan" Height="200" HorizontalAlignment="Stretch" VerticalAlignment="Top" Opacity=".8">

                <Grid Name="gridClassifierDisplay" VerticalAlignment="Stretch" Background="LightGoldenrodYellow" Width="{Binding ActualWidth, ElementName=stackPanelClassifiers}">

Ответ 7

Если это внутри шаблона, используйте это:

<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>