У меня есть сетка, ширина которой "1 *". Так что фактическая ширина определяется во время работы, я думаю. Внутри этой сетки у меня есть еще одна сетка, ширина которой я хочу установить на ширину рабочей среды родительской сетки. Как я могу это сделать в xaml через привязку.
Как связать ширину дочернего элемента с шириной родительского элемента в silverlight
Ответ 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>