it-roy-ru.com

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

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

41
ch.smrutiranjan parida

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

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

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

97
Anobik

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

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

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

HorizontalAlignment="Stretch"

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

17
RockLegend

Если вы делаете это в 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);
3
William Jockusch
 Width="{Binding Width, RelativeSource={RelativeSource AncestorType={x:Type Parent}, Mode=FindAncestor}}"

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

2
Gaurav Panwar

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

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