ListBoxItem中Horizo​​ntalContentAlignment =伸展不灵(Lis

2019-09-28 05:33发布

我无法让我的列表框项目伸展到整个列表框的宽度。

下面是我的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的Horizo​​ntalContentAlignment为Stretch
  • 覆盖风格ListBoxItem的即列表框XAML中ItemContainerStyle标签内的新风格(注:我使用的是国际化的导航主题)
  • 在CoreStyles.xaml EDITTING的DefaultListBoxItemStyle风格,包括Horizo​​ntalContentAlignmemt

难道是因为我使用我的数据模板的一个单独的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>

它的工作原理却影响了国际化的主题,这样的列表框项目的higlighting当鼠标悬停在选择时有不同的风格,以国际化主题的其余部分。

Answer 1:

试试这个,你的列表框里面:

<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 ,我展示的第一个答案。如果你不希望这种行为你所有的列表框,你可以复制这种风格,并给它一个不同的密钥。



文章来源: ListBoxItem HorizontalContentAlignment=Stretch not working