Привязка списка к потоку WrapPanels - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь создать интерфейс в WPF, где отображается список элементов, занимая как можно меньше вертикального пространства:

mockup

Мой инстинкт был использовать ItemsControlсвязать мой список и поместить пользовательский интерфейс для каждого элемента в WrapPanel.К сожалению, по умолчанию каждый элемент начинается с новой строки независимо от размера окна.Добавление StackPanel с Orientation="Horizontal" превращает все элементы в одну строку, независимо от размера ...

    <!--<ScrollViewer Grid.Row="0" Grid.Column="0"
          VerticalScrollBarVisibility="Auto">-->
        <ItemsControl  Margin="0,4" ItemsSource="{Binding Path=Watchers}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"></StackPanel>
            </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.Resources>
                <DataTemplate DataType="{x:Type Core:Watcher}">
                    <WrapPanel Orientation="Horizontal">
                        <TextBlock Margin="0,2" Text="{Binding Path=Name}"
                        Width="250px" />
                        <TextBox Text="{Binding Path=Value, Mode=OneWay}" 
                        Width="300px">
                        </TextBox>
                    </WrapPanel>
                </DataTemplate>
            </ItemsControl.Resources>
        </ItemsControl>
    <!--</ScrollViewer>-->

Любые указатели?

Бонусный пункт: где я должен добавить ScrollViewer вдля того, чтобы поведение было показано в моем макете?

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 30 января 2012

почему бы не использовать WrapPanel в качестве ItemsPanelTemplate?

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
 </ItemsControl.ItemsPanel>

, если элементы имеют пространство слева, они будут расположены горизонтально.

1 голос
/ 30 января 2012

WrapPanel имеет, наряду с StackPanel, свойство Orientation, которое по умолчанию равно Vertical.Таким образом, ваш список должен обернуться (при условии, что у вас достаточно места под рукой), если ваш ItemsPanelTemplate выглядит следующим образом:

<ItemsPanelTemplate>
    <WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>

О ScrollViewer:

Желаемое поведение должно быть достигнуто путем определенияэто как следует (не проверено, хотя, и я опустил все для этого примера ненужные вещи):

<ScrollViewer HorizontalAlignment="Stretch">
    <ItemsControl MinWidth="550" Width="{Binding ActualWidth, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollViewer}}}" />
</ScrollViewer>
1 голос
/ 30 января 2012

Я думаю, вы хотите WrapPanel в ItemsPanel и StackPanel в ItemTemplate.

...