在
listview
中,我使用 Wrappanel
作为 ItemsPanelTemplate
<ListView ItemsSource="{Binding TodoItemViewModels}"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
Drop="Card_Drop"
AllowDrop="True"
DragLeave="Card_DragLeave"
IsEnabled="{Binding Disable, ElementName=root}"
Background="Green">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Margin="0" Orientation="Vertical" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<!-- Displaying Cards in CardCollection View -->
<ListView.ItemTemplate>
<DataTemplate>
<Border BorderThickness="2"
BorderBrush="BlanchedAlmond"
Opacity="1"
Background="BlanchedAlmond"
Width="25" Height="30"
MouseMove="Card_MouseMove"
CornerRadius="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<TextBlock Text="{Binding Cardstr}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Foreground="{Binding Cardclr}"
Background="BlanchedAlmond" />
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我怎样才能修复
Listview
,所以如果我删除一个项目,它的位置将会有一个空槽,而不是像下面的图片那样重新排列列表:
我尝试了
Wrapanel
和Gridview
都无法正常工作。
我不想在网格中逐个单元插入,因为这会使程序变得复杂
您不应移除卡,而应将其替换为代表空插槽的另一个对象。
例如,您可以向包含
IsEmpty
和 Cardstr
属性的类添加 Cardclr
属性,然后使用 DataTemplateSelector
基于此属性选择适当的模板:
public class CustomTemplateSelector : DataTemplateSelector
{
public DataTemplate CardTemplate { get; set; }
public DataTemplate EmptyTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var obj = item as YourClass;
if (obj != null && obj.IsEmpty && EmptyTemplate != null)
return EmptyTemplate;
return CardTemplate;
}
}
XAML::
<ListView ItemsSource="{Binding TodoItemViewModels}"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
Drop="Card_Drop"
AllowDrop="True"
DragLeave="Card_DragLeave"
IsEnabled="{Binding Disable, ElementName=root}"
Background="Green">
<ListView.Resources>
<DataTemplate x:Key="cardTemplate">
<Border BorderThickness="2"
BorderBrush="BlanchedAlmond"
Opacity="1"
Background="BlanchedAlmond"
Width="25" Height="30"
MouseMove="Card_MouseMove"
CornerRadius="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<TextBlock Text="{Binding Cardstr}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Foreground="{Binding Cardclr}"
Background="BlanchedAlmond" />
</Border>
</DataTemplate>
<DataTemplate x:Key="emptyTemplate">
<Border>
<TextBlock>empty...</TextBlock>
</Border>
</DataTemplate>
</ListView.Resources>
<ListView.ItemTemplateSelector>
<local:CustomTemplateSelector
CardTemplate="{StaticResource cardTemplate}"
EmptyTemplate="{StaticResource emptyTemplate}"/>
</ListView.ItemTemplateSelector>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Margin="0" Orientation="Vertical" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>