how to bind width of child element to width of parent element in silverlight

后端 未结 6 1276
南笙
南笙 2021-01-30 20:15

I have a grid whose width is \"1*\". So the actual width decided at runtime I think. Within that grid I have another grid whose width I want to set to the runtime width of paren

相关标签:
6条回答
  • 2021-01-30 20:38

    This is generic solution which may work everywhere. You wouldn't need to write parent element name. This will identify its parent and will take parent's width.

    Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"
    
    0 讨论(0)
  • 2021-01-30 20:44

    This will actually help you I guess

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

    This binds the width to the parent element or the element name provided

    0 讨论(0)
  • 2021-01-30 20:44
     Width="{Binding Width, RelativeSource={RelativeSource AncestorType={x:Type Parent}, Mode=FindAncestor}}"
    

    if both controls DataContext is different.

    0 讨论(0)
  • 2021-01-30 20:46

    I think that easiest way to do same thing is:

    HorizontalAlignment="Stretch"
    

    That is not using binding as you have been asked, but it is easier.

    0 讨论(0)
  • 2021-01-30 20:47

    If you are doing it in CodeBehind, this works for me. It has the added advantage that bindMe does not have to be a child of 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);
    
    0 讨论(0)
  • 2021-01-30 20:51

    Use HorizontalContentAlignment="Stretch" on ListBox:

    <ListBox HorizontalContentAlignment="Stretch">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical">
                    <Image HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Source="TestImage.png"/>
                    <TextBlock HorizontalAlignment="Center" Text="Test Text"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    or if it is inside a Template use this:

    <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 讨论(0)
提交回复
热议问题