首页 文章

将WPF ListBox.ItemTemplate的内容拉伸到ListBoxItem的宽度的最佳方法

提问于
浏览
3

我知道这可能是重复的,但我还没有找到最佳解决方案 . 我只是遇到了使用ListBox.ItemTemplate的问题,我希望内容Grid为HorizontalAlignment =“ Stretch ”(不起作用) . 所以我试图将网格的宽度绑定到 ListBoxItem ,但最后一项表现得很奇怪 . 如果绑定到 ListBox 的宽度,会有一个滚动条,虽然转换器可以解决它,我认为必须有一些更简单和优雅的解决方案 .

代码隐藏:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new List<Data>()
        {
            new Data("a1","a2"),
            new Data("b1","b2"),
            new Data("c1","c2")
        };
    }
        public class Data
        {
            public Data(string s1, string s2)
            {
                this.S1 = s1;
                this.S2 = s2;
            }
            public string S1 { get; set; }
            public string S2 { get; set; }
        }
    }

XAML:

<Grid>
    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Background="Blue" 
                      Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, 
                    Path=ActualWidth, Mode=OneWay}"
                      >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding S1, Mode=OneWay}" 
                               FontSize="20" Grid.Column="0"/>
                    <TextBlock Text="{Binding S2, Mode=OneWay}" 
                               FontSize="20" Grid.Column="1"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

enter image description here

enter image description here

enter image description here

1 回答

  • 4

    尝试将 ListBoxItemHorizontalContentAlignment 设置为 Strecth ,例如:

    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    

相关问题