У меня есть страница, на которой у меня есть сетка с 2 столбцами, один из которых имеет ширину 80 *, а другой - 20 *. Под сеткой находится панель стека, в которую я загружаю элементы пользовательского интерфейса (дочерние панели стека) во время выполнения.
Моя цель - привязать ширину стековых панелей к столбцам сетки. Это работает отлично, и размеры стека изменяются, если динамический контент макетируется в статическом представлении. Но при запуске приложения привязки не выполняются, а ширина не ограничивается.
Есть ли способ обновить привязки, чтобы я мог уведомить стековые панели, чтобы они указывали ширину сетки и настраивали ее размер?
Обновлен:
Вот как выглядит мой XAML:
<Page x:Class="WPFTestApp.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Page1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid x:Name="resizeGrid"
Grid.Column="0" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="leftColumn"
Width="80*" />
<ColumnDefinition x:Name="rightColumn"
Width="20*" />
</Grid.ColumnDefinitions>
</Grid>
<StackPanel x:Name="contentPanel"
Grid.Column="0" Grid.Row="0" >
<!-- Dynamic StackPanels are added here -->
</StackPanel>
</Grid>
</Page>
В своем коде я создаю элементы StackPanel и добавляю их в contentPanel, говоря:
contentPanel.Children.Add (...);
К сожалению, я должен использовать StackPanels здесь. : - (
Разметка динамически создаваемого элемента StackPanel выглядит следующим образом (обратите внимание, что я использую привязку к сетке уже в XAML):
<StackPanel x:Name="element01"
Orientation="Horizontal"
Width="{Binding ElementName=resizeGrid, Path=ActualWidth}" >
<StackPanel x:Name="leftPanel"
Orientation="Vertical"
Width="{Binding ElementName=leftColumn, Path=ActualWidth}">
<!-- Content goes here -->
</StackPanel>
<StackPanel x:Name="rightPanel"
Orientation="Vertical"
Width="{Binding ElementName=rightColumn, Path=ActualWidth}">
<!-- Content goes here -->
</StackPanel>
</StackPanel>
Код XAML для моих динамических элементов StackPanel генерируется с помощью преобразования XSLT
Обратите внимание на динамическую StackPanel пространства имен xmlns: x. Это также должно быть сделано из-за того, что это генерируется через XSLT