我正在使用Treeview和Listview在我的WPF应用程序中创建一个资源管理器控件。对于Listview,我想使用32x32像素图标显示所选文件夹的内容。为了实现这一点,我有以下XAML,它也截断TextBlock中的长文件/文件夹名称:
return this.httpClient.get<Object[]>(queryUrl).pipe(
map(response => response.map(data => new SearchResult{
id: item.id.videoId,
title: item.snippet.title,
description: item.snippet.description,
thumbnailUrl: item.snippet.thumbnails.high.url,
})),
tap(...),
catchError(...)
)
}
当选择ListViewItem时,我希望它与下面的项(文件/文件夹)重叠,而不是当前行为,即增加WrapPanel当前行中所有ListViewItem的高度。
要访问ListViewItem,我使用以下代码,以便在选择项目时显示TextBlock中的所有文本:
<ListView x:Name="LV_Explore"
Grid.Column="2"
BorderThickness="0"
VerticalContentAlignment="Top"
ItemsSource="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Visible"
AllowDrop="True">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="SP_ExploreItem"
Width="42">
<Image Source="{Binding LargeIcon, UpdateSourceTrigger=PropertyChanged}"
Margin="0,0,0,2" />
<TextBlock x:Name="TXT_ExploreItem"
Width="42"
Height="42"
TextOptions.TextFormattingMode="Display"
TextAlignment="Center"
TextWrapping="Wrap"
TextTrimming="WordEllipsis"
LineStackingStrategy="BlockLineHeight"
Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
作为参考我希望实现类似于桌面的行为,例如:屏幕截图1:Normal state屏幕截图2:Selected state
虽然我目前正常状态正常,所选状态如下所示:屏幕截图3:Listview selected state
我怀疑我可能需要在ListView控件的ItemsPanelTemplate中使用WrapPanel更改为Canvas,这将失去在Listview中自动排列和包装项目的行为。因此,我正在寻找最佳方法的建议,以便维护布局并允许我在选择时重叠项目。
谢谢, 杰
答案 0 :(得分:0)
正如您可能已经意识到的那样,listview项目中的某些内容位于某种框内,并且它没有出现。如果你不让它成长,它将被截断或削减。 画布不会剪辑,以便勾选您需求的一个框,您必须编写基于画布或基本面板控件的自定义面板,并编写您自己的度量/编排代码。 这是非常重要的,任何滚动都可能使它更复杂,但你可以看看人们的工作: 例如 https://www.codeproject.com/Articles/37348/Creating-Custom-Panels-In-WPF
或者,您可以使用装饰器。 adorner图层位于窗口中的其他所有内容之上,但仍与其关联的相同datacontext相同。 这些都不是那么容易使用,但你可以再将代码建立在其他人的基础上:
如果我按照你想要的正确方式,装饰师可能是我的第一个候选人。
现在没有多少人使用vb,我担心你每次看到他们是c#的样本时都会发现很多。