Listboxitem неправильно выравнивает элементы - PullRequest
1 голос
/ 11 ноября 2009

Хорошо, я получил следующий шаблон данных:

 Style="{StaticResource LBStyle}" HorizontalContentAlignment="Stretch">
                <ListBox.ItemTemplate>

                    <DataTemplate>
                        <Grid >
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="1*"/> 
                                <ColumnDefinition Width="100" />
                            </Grid.ColumnDefinitions>
                            <Label Content="{Binding Name}" x:Name="txt" Grid.Column="0"></Label>
                            <StackPanel Orientation="Vertical" Grid.Column="1">
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{z:txt text=time}" Width="50">:</TextBlock>
                                    <TextBlock Text="{Binding Path=Value, Converter={StaticResource DecFix}}" />
                                </StackPanel>

                                <StackPanel Orientation="Horizontal" Width="50">
                                    <TextBlock Text="Norm.">:</TextBlock>
                                    <TextBlock Text="{Binding Path=NormaalWaarde, Converter={StaticResource DecFix}}" />
                                </StackPanel>
                            </StackPanel>
                        </Grid>

                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsCurrentStep}" Value="True">
                                <Setter TargetName="txt" Property="FontWeight" Value="Bold"/>
                            </DataTrigger> 
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </ListBox.ItemTemplate>

По сути, я хочу, чтобы у каждого элемента был текст слева, который растягивается по ширине списка и 2 значениям справа, а справа. Я пробовал это со многими различными видами панелей, сеток и т. Д. И все они, кажется, просто помещают значения с правой стороны, обернутые вместе с текстом на левой стороне, как это:

текст ссылки (пожалуйста, используйте ссылку, чтобы увидеть, что я имею в виду, я пока не могу публиковать фотографии)

Если я положу такую ​​же табличку с данными в другое место, она просто сделает то, что должна. У кого-нибудь есть предложение?

Редактировать: Я поместил гридсплиттер между списком и остальной частью окна, и похоже, что список растягивается бесконечно. Вот как список размещается среди других элементов в моем окне: (список находится в теге usercontrol)

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="2.5*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>           
        <RowDefinition/>
    </Grid.RowDefinitions>

    <vid:TagControl x:Name="Tagger" Grid.Column="0"></vid:TagControl>

    <GridSplitter ResizeDirection="Columns" Width="20" />

    <vid:DShowPlayer x:Name="DShowPlayer1" Grid.Column="1"></vid:DShowPlayer>
</Grid>

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Проблема здесь, безусловно, не связана с вашим DataTemplate вообще, или с тем, используете ли вы привязку данных или нет. Что-то в стиле ListBox, ListBoxItem или ControlTemplate приводит к тому, что элементу управления для HorizontalAlignment не присваивается значение «Растянуть» на некотором уровне. (Или вы можете использовать пользовательский код Measure или Arrange, который игнорирует HorizontalAlignment на некотором уровне)

Я подозреваю, что ваш Style="{StaticResource LBStyle} является виновником или каким-либо другим свойством ListBox, которое не отображается.

  • Стандартный стиль ListBox содержит шаблон с Border и ScrollViewer, ни один из которых не содержит параметр HorizontalAlignment
  • Шаблон ListBox ItemsPanel по умолчанию состоит из StackPanel, который также не содержит настройки HorizontalAlignment
  • Шаблон по умолчанию ListBoxItem содержит шаблон с Border и ContentPresenter. Только Border содержит параметр HorizontalAlignment, и он устанавливается (с помощью установщика стиля) на содержащийся объект ListBox HorizontalContentAlignment, для которого установлено значение «Растянуть».

Если вы работаете изолированно, отправленный вами код работает нормально. Выполните поиск в своем стиле (и других свойствах, параметрах кода и т. Д.) Для замены любого шаблона или параметра, который переопределяет стандартную обработку HorizontalAlignment.

Если проблема сначала не очевидна, удаляйте настройки по одному, пока они не перестанут работать, а затем посмотрите на то, что вы удалили.

0 голосов
/ 11 ноября 2009

Вы должны использовать Grid вместо DockPanel с 3 столбцами, 1-й столбец как 1 *, 2-й и 3-й как фиксированная длина ...

0 голосов
/ 11 ноября 2009

Ни один из примеров DataTemplate, который я могу найти, прямо не указывает это, но выглядит как в случае, когда DataTemplates применяются только тогда, когда элементы списка происходят из привязки ItemsSource. Если вы непосредственно заполняете коллекцию Items, шаблон данных не используется.

При добавлении ItemTemplate в Expression Blend текст команды читается как «Сгенерированный шаблон элемента», что, по-видимому, означает, что шаблон используется только тогда, когда элемент генерируется косвенно.

И каждый пример, который я могу найти, использует привязку данных для источника элемента.

...