如何使ListView宽度匹配其所在Expander的宽度?
让ListView宽度与所在Expander一致的解决方法
你可以通过以下调整实现需求:
- 保留Expander已设置的
HorizontalAlignment="Stretch",确保它能填满所在容器的水平空间 - 给ListView添加
HorizontalContentAlignment="Stretch",让列表项和ListView本身都铺满父容器宽度 - 可选:移除Expander内容区域的默认内边距,消除ListView与Expander边缘的间隙
修改后的完整代码
<Expander x:Name="expander" IsExpanded="False" ExpandDirection="Down" Header="Main" HorizontalAlignment="Stretch" Grid.Column="1" Grid.Row="1"> <Expander.Content> <ListView x:Name="listView" SelectionMode="None" IsItemClickEnabled="True" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" ItemClick="ListItemClicked" ItemTemplate="{StaticResource ListViewTemplate}"/> </Expander.Content> <!-- 可选:移除内容区域默认内边距 --> <Expander.ContentTemplate> <DataTemplate> <ContentPresenter Margin="0"/> </DataTemplate> </Expander.ContentTemplate> </Expander>
关键说明
HorizontalContentAlignment="Stretch":既让ListView自身填充Expander的内容空间,也让列表项铺满ListView的宽度- 若添加
ContentTemplate设置Margin="0":可以消除Expander内容区域默认的内边距,让ListView完全贴合Expander边缘
另外也可以直接绑定ListView的宽度到Expander的实际宽度,这种方式更直接:
<ListView x:Name="listView" Width="{Binding ElementName=expander, Path=ActualWidth}" .../>
不过更推荐用布局属性的方式,更符合WPF/UWP的布局逻辑,避免硬绑定可能带来的适配问题。
内容的提问来源于stack exchange,提问作者joeatethebeans
相关产品推荐
相关产品推荐

