listbox корректно переносится, когда заключен в вертикальную ориентацию, но не работает для горизонтальной - PullRequest
1 голос
/ 09 июля 2011

Следующий 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>

...