Следующий XAML объясняет, что я пытаюсь сделать. Окно списка переносится так, как я хочу, когда ориентация родителей установлена на вертикальное положение, но я хочу, чтобы всплывающее окно слева, а затем перенос списка происходит неожиданно. Я видел другие посты о привязке к размеру родителя, использовании преобразователей значений и т. Д. Для математики, но я не уверен. Почему / должен изменить контейнер 2 родителей выше внезапно нарушить логику списков?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="421" Width="602">
<Window.Resources>
<ObjectDataProvider x:Key="OrientationEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="Orientation"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<Style x:Key="HorizontalWrapListBox" TargetType="ListBox">
<Style.Setters>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<ScrollViewer HorizontalScrollBarVisibility="Disabled" >
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Window.Resources>
<Grid>
<StackPanel Name="stackpanel1" Orientation="Vertical" >
<Expander >
<Grid Background="#FFFFFDEB" >
<StackPanel Width="200" >
<Slider Name="slider1" Minimum="50" Maximum="250"/>
<ComboBox ItemsSource="{Binding Source={StaticResource OrientationEnum}}"
SelectedItem="{Binding ElementName=stackpanel1,Path=Orientation}"/>
</StackPanel>
</Grid>
</Expander>
<Grid Name="parentingGrid">
<ListBox HorizontalAlignment="Stretch" DataContext="{Binding ElementName=slider1}" Style="{StaticResource HorizontalWrapListBox}" >
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
<Rectangle Width="{Binding Value}" Height="{Binding Value}" Fill="#FFAA5353" Margin="4" />
</ListBox>
</Grid>
</StackPanel>
</Grid>