ListBoxItem HorizontalContentAlignment = Растяжение не работает - PullRequest
1 голос
/ 18 марта 2012

У меня возникают проблемы с растяжкой элементов списка до всей ширины списка.

Ниже мой xaml для моего списка

<ListBox x:Name="MyListBox"
                 VerticalAlignment="Stretch"
                 HorizontalAlignment="Stretch"
                 HorizontalContentAlignment = "Stretch"
                 Margin="0,10,0,0"
                 ItemsSource="{Binding Path=Users}"
                 ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                 Grid.Column="0"
                 Grid.ColumnSpan="1"
                 Grid.Row="1"
                 Grid.RowSpan="3">                      
        <ListBox.ItemTemplate>
            <DataTemplate>
                <local:MyListBoxTemplate/>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

Я попробовал следующие предложения, найденные в других сообщениях, но они не сработали для меня:

  • Установите для горизонтального содержимого ListBox значение Stretch
  • Перезапись стиля для listboxitem, то есть новый стиль в тегах ItemContainerStyle внутри списка xaml (примечание: я использую космополитическую тему навигации)
  • Редактирование стиля DefaultListBoxItemStyle в CoreStyles.xaml для включения HorizontalContentAlignmemt

Это потому, что я использую отдельный файл xaml для своего шаблона данных? Или проблема с моим шаблоном данных? У кого-нибудь есть предложения по поводу того, что еще я мог бы попробовать?

Я видел где-то, возможно, я мог бы связать ширину ListBoxItem с фактической шириной ListBox?

Я довольно новичок в этом, поэтому заранее прошу прощения, если я пропустил что-то действительно простое / очевидное!

Ниже мой шаблон данных:

<Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch" ShowGridLines="True" Height="20">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10*" />
        <ColumnDefinition Width="30*" />
        <ColumnDefinition Width="300*" />
        <ColumnDefinition Width="50*" />
        <ColumnDefinition Width="10*" />
    </Grid.ColumnDefinitions>
    <Image x:Name="TwitterImageIcon"
           Grid.Column="1" 
           Grid.ColumnSpan="1" 
           Source="{Binding Path=imageUrl}"
          />
    <StackPanel Orientation="Horizontal" Grid.Column="2" Grid.ColumnSpan="1" HorizontalAlignment="Stretch" >

        <TextBlock x:Name="TwitterUsernameTextBlock"
                   Text="{Binding Path=username,StringFormat='@\{0\}  '}"/>
        <TextBlock x:Name="TwitterFullNameTextBlock"
               Text="{Binding Path=fullname}"/>
    </StackPanel>


        <Button x:Name="InfoButton"
            Content="Info" 
            Grid.Column="3" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch"/>
        <Border x:Name="StyleBorder" />
    </Grid>

Любые предложения с благодарностью.

Заранее спасибо.

Обновление: забыл упомянуть, что при добавлении:

    <ListBox...>
        <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.Resources>
    </ListBox>

Это работает, однако, влияет на космополитическую тему, так что выделение элемента списка при наведении на него и при выборе отличается от стиля остальной космополитической темы.

1 Ответ

8 голосов
/ 18 марта 2012

Попробуйте это внутри списка:

<ListBox...>
    <ListBox.Resources>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.Resources>
</ListBox>

EDIT1 (извините за мой плохой английский)

Найдите стиль ListBoxItem в CoreStyles.xaml (ищите x:Key="DefaultListBoxItemStyle").Внутри этого стиля найдите ContentControl с именем x:Name="contentControl" и добавьте свойство HorizontalContentAlignment, после изменения код будет выглядеть следующим образом:

<ContentControl x:Name="contentControl" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" >
    <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" VerticalAlignment="Center"  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="7"/>
</ContentControl>

Теперь вы можете удалить Listbox.Resources, который я показываю напервый ответ ... Если вы не хотите, чтобы это поведение распространялось на все ваши списки, вы можете скопировать этот стиль и назначить ему другой ключ.

...