【发布时间】:2019-01-14 13:18:22
【问题描述】:
我想动态更改 ListBox 中项目的宽度。
我有这个用于水平列表的 XAML
<ListBox x:Name="listBox">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid IsItemsHost="True" Rows="1" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
带有以下 .cs(DragAndDrop 代码的一部分)
ObservableCollection<int> _List = new ObservableCollection<int>();
public void Fill(int num)
{
for (int i = 1; i <= num; i++)
{
_List.Add(i);
}
listBox.ItemsSource = _List;
Style itemContainerStyle = new Style(typeof(ListBoxItem));
itemContainerStyle.Setters.Add(new Setter(ListBoxItem.AllowDropProperty, true));
itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(s_PreviewMouseLeftButtonDown)));
itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.DropEvent, new System.Windows.DragEventHandler(listBox_Drop)));
listBox.ItemContainerStyle = itemContainerStyle;
}
我想动态设置Rows="2",例如基于 num 值并在 .cs 代码中更改它,而不是在 XAML 中将此值设置为静态
【问题讨论】:
-
如果有一个特定的
num值你想切换到两行,你不能只设置Columns而不是Rows? -
@Clemens 列也可能是正确的方法!一般问题是如何从 .cs 代码更改 ListBox 内的参数
-
像往常一样,通过数据绑定。