自定义 ListBox 的控件面板

在默认情况下, ListBox 的子项目显示类似于默认的 StackPanel ,在水平方向为 Strench 垂直方向进行堆叠.

而有时候,为了控制子元素的布局方式,需要自定义 ListBox 的内部面板,例如为了实现下面的效果

Display with 2 columns
可以看到,上面采用的是双列布局,实际上用的是 UniformGrid 控件作为 ListBox 的内部面板,因此,对于绑定的数据集合,就相当于是在一个 UniformGrid 中进行放置,唯一区别的是,每个子元素的范围是其实际的占用区域,在其外部还有许多留白,这部分相当于是 ListBox 的子区域点击外侧的空白处也是可以触发 SelectedValueChanged

相关的 XAML 代码如下

<ListBox ItemsSource="{Binding Students}">
    <!--此处
自定义 ListBox 的控件面板在默认情况下,ListBox 的子项目显示类似于默认的 StackPanel,在水平方向为 Strench 垂直方向进行堆叠.而有时候,为了控制子元素的布局方式,需要自定义 ListBox 的内部面板,例如为了实现下面的效果可以看到,上面采用的是双列布局,实际上用的是 UniformGrid 控件作为 ListBox 的内部面板,因此,对于绑定的数据集合,就相当于是在一个 UniformGrid 中进行放置,唯一区别的是,每个子元素的范围是其实际的占用区域,在其外部 表格通常可以用GridView显示,但是GridView的使用方法有一些复杂,有时只想显示简单的图片或文字时,使用 ListBox 就会方便很多,而且 ListBox 也支持表格 布局 的拓展。 一、如何实现? ListBox 有个属性叫 Items Panel ,是元素的容器。我们可以将这个属性设为自己的容器,一般使用Wrap Panel 即可实现表格 布局 的效果,给Wrap Panel 设置 一个宽度,只要超过宽度的元素就会换行。 示例代码如下: < ListBox . Items 代码如下: <Window x:Class=" ListBox ScrollTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/ xaml /presentation"
C# 数学类库使用心得(不定期更新)使用LU分解求解线性方程组Ax=b的解(2019.3.17) 使用LU分解求解线性方程组Ax=b的解(2019.3.17) 首先创建一个矩阵A,矩阵数据可以使用二维数组作为源数据,使用DenseMatrix.OfArray(double[,] array)进行创建 double[,] A = {3, 1.4,0,0 }, {1.4, 2, 2....
<Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListBox Item }"> <Border Name="border" Padding="5" Margin="2" Background="LightBlue" BorderBrush="DarkBlue" BorderThickness="1"> <ContentPresenter /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="border" Property="Background" Value="DarkBlue" /> <Setter TargetName="border" Property="Foreground" Value="White" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </ Style > </ ListBox .Resources> < ListBox Item > Item 1</ ListBox Item > < ListBox Item > Item 2</ ListBox Item > < ListBox Item > Item 3</ ListBox Item > </ ListBox > 在这个样式 ,我们使用了 ControlTemplate 控制了 ListBox Item 的外观。我们将 ListBox Item 包装在 Border ,并 设置 了一些属性,如 Padding、Margin、Background、BorderBrush 和 BorderThickness。然后,我们使用 ControlTemplate.Triggers 的触发器来 设置 选定项的外观。 您可以根据需要更改这些属性,以满足您的需求。