WPF中ListBox的Item使用了StackPanel,StackPanel的长度怎么才能设置为自动的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF中ListBox的Item使用了StackPanel,StackPanel的长度怎么才能设置为自动的相关的知识,希望对你有一定的参考价值。

<ListBox Name="ListBox1" Background="LightCoral" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" >-->
<TextBlock Grid.Column="0" Margin="5,10" Text="Binding Name" Width="30"/>
<TextBox Margin="0,5" Height="24" Text="Binding Text"/>
<ComboBox Margin="0,5" Height="24" ItemsSource="Binding Combo"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Listbox的宽度是可以改变的,但是每个Item里的StackPanel宽度却不能随之改变
如何解决,或者是改用其它的布局控件?

首先,控件的宽度要随外部容器宽度改变而改变的话,只能用grid做容器,并且宽度为*才能达到自适应的效果。
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="5,10" Text="Binding Name" Width="30"/>
<TextBox Grid.Column="1" Margin="0,5" Height="24" Text="Binding Text"/>
<ComboBox Grid.Column="2" Margin="0,5" Height="24" ItemsSource="Binding Combo"/>
</Grid>
</DataTemplate>
改成这样就可以了!~追问

改成Grid了,还是不行
Grid的大小没有跟着改变

追答

不可能啊,请你检查一下 1.grid宽度有没有设定宽度 2.listbox有没有设定宽度 3.listboxitem有没有设定宽度 这三个都不要设定宽度的喔!

追问

都没有长度限制,ListBox是在一个Grid中的,用了GridSplitter后,它的宽度是可以改变的
但是用来做Item的StackPanel或Grid就是不会自动改变宽度

追答

晕= =,请帖代码。。。

参考技术A </StackPanel> </DataTemplate> </怎么没见你的Prog x:Class="Wpf 参考技术B 你好,请问你是用什么方法解决的?我也遇到同样的问题! 参考技术C 初学,最近也开始研究了

WPF Tips: Specify background color of the selected item in listbox

当没有focus在listbox时,selectedItem的background为灰色,只有鼠标点击之后才会变成蓝色。希望即使鼠标没有点击的时候也是蓝色。

解决方法:

在xaml中添加:

<ListBox.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red"/> </ListBox.Resources>

或在app.xaml中添加:

<Style TargetType="ListBoxItem">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue"/>
            </Style.Resources>
            <!--<Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="LightBlue" />
                </Trigger>
            </Style.Triggers>-->
        </Style>

 

参考:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/38b88ef4-b4d1-4a61-a00e-e4f960896a9b/wpf-how-to-make-the-selection-item-highlight-color-stay-in-the-listbox-even-the-listbox-control?forum=wpf

https://blogs.msdn.microsoft.com/wpfsdk/2007/08/31/specifying-the-selection-color-content-alignment-and-background-color-for-items-in-a-listbox/

以上是关于WPF中ListBox的Item使用了StackPanel,StackPanel的长度怎么才能设置为自动的的主要内容,如果未能解决你的问题,请参考以下文章

WPF中 listbox中item被选中时的样式

WPF 的Listbox 滚动处理

WPF Tips: Specify background color of the selected item in listbox

WPF Listbox Item:设置第一项的前景色

WPF中ListBox连续选择同一项时SelectionChanged 事件不响应的问题

WPF 使用EventTrigger设置Item的IsSelected选项