用于模拟Outlook附件视图的WPF控件
我正在尝试使ListView看起来像MS Outlook附件控件。我已经得到了水平滚动,但它仍然只显示一行中的一项 我怎样才能让它看起来像这样? 到目前为止我所取得的成就:用于模拟Outlook附件视图的WPF控件,wpf,xaml,Wpf,Xaml,我正在尝试使ListView看起来像MS Outlook附件控件。我已经得到了水平滚动,但它仍然只显示一行中的一项 我怎样才能让它看起来像这样? 到目前为止我所取得的成就: <Grid x:Name="grdAttachments" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="3"> <Grid.RowDefinitions> <RowDefinition
<Grid x:Name="grdAttachments"
Grid.Row="4"
Grid.Column="1"
Grid.ColumnSpan="3">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MaxHeight="45" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="65" />
<ColumnDefinition Width="15" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Margin="3,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Cursor="Hand"
Text="Angefügt:" />
<ScrollViewer Grid.Row="0" Grid.Column="2">
<ListBox x:Name="libAttachments"
Background="Transparent"
ItemsSource="{Binding Attachments}"
MouseDoubleClick="lvAttachments_MouseDoubleClick">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,10,0" Orientation="Horizontal">
<Image Source="{Binding MimeTypeIcon}" Stretch="None" />
<TextBlock Margin="5,0,0,0" Text="{Binding File.Name}" />
<StackPanel.ContextMenu>
<ContextMenu>
<ContextMenu.Items>
<MenuItem Click="btnOpenAttachment_Click" Header="Öffnen">
<MenuItem.Icon>
<Image Source="/Images/magnifier.png" Stretch="None" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="btnSaveAttachment_Click" Header="Speichern unter">
<MenuItem.Icon>
<Image Source="/Images/disk-black.png" Stretch="None" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu.Items>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
</Grid>
听起来您想要的是一个带有自定义ItemsPanel的
<ListBox>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ListBox>
上面的代码段将列表框配置为使用作为布局提供程序或“ItemsPanel”来显示要显示的项。从这里可以实现自定义项容器样式和/或自定义数据模板。如果使用MVVM模式并将数据绑定到集合(最好是可观察的),则可以像上面那样轻松地应用DataTemplate
要完成此图片,可以使用滚动查看器,只要其高度受父布局控件(Grid.Row=1,其中RowDefinition height=“constant”)或滚动查看器上设置的显式高度的约束
我基于您的最终解决方案如下所示:
<ScrollViewer HorizontalScrollBarVisibility="Disabled">
<ListBox
ItemsSource="{Binding Attachments}"
MouseDoubleClick="lvAttachments_MouseDoubleClick"
SelectionMode="Single">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,10,0" Orientation="Horizontal">
<Image Source="{Binding MimeTypeIcon}" Stretch="None" />
<TextBlock Margin="5,0,0,0" Text="{Binding File.Name}" />
<StackPanel.ContextMenu>
<ContextMenu>
<ContextMenu.Items>
<MenuItem Click="btnOpenAttachment_Click" Header="Öffnen">
<MenuItem.Icon>
<Image Source="/Images/magnifier.png" Stretch="None" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="btnSaveAttachment_Click" Header="Speichern unter">
<MenuItem.Icon>
<Image Source="/Images/disk-black.png" Stretch="None" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu.Items>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
<>请注意:如果可能的话,考虑使用替代事件,它们会导致松散耦合。如果行为本身是项目中其他地方的东西,或者可重用性是理想的,那么引入a甚至可能是有意义的。听起来你想要的是一个带有自定义ItemsPanel的a
<ListBox>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ListBox>
上面的代码段将列表框配置为使用作为布局提供程序或“ItemsPanel”来显示要显示的项。从这里可以实现自定义项容器样式和/或自定义数据模板。如果使用MVVM模式并将数据绑定到集合(最好是可观察的),则可以像上面那样轻松地应用DataTemplate
要完成此图片,可以使用滚动查看器,只要其高度受父布局控件(Grid.Row=1,其中RowDefinition height=“constant”)或滚动查看器上设置的显式高度的约束
我基于您的最终解决方案如下所示:
<ScrollViewer HorizontalScrollBarVisibility="Disabled">
<ListBox
ItemsSource="{Binding Attachments}"
MouseDoubleClick="lvAttachments_MouseDoubleClick"
SelectionMode="Single">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,10,0" Orientation="Horizontal">
<Image Source="{Binding MimeTypeIcon}" Stretch="None" />
<TextBlock Margin="5,0,0,0" Text="{Binding File.Name}" />
<StackPanel.ContextMenu>
<ContextMenu>
<ContextMenu.Items>
<MenuItem Click="btnOpenAttachment_Click" Header="Öffnen">
<MenuItem.Icon>
<Image Source="/Images/magnifier.png" Stretch="None" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Click="btnSaveAttachment_Click" Header="Speichern unter">
<MenuItem.Icon>
<Image Source="/Images/disk-black.png" Stretch="None" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu.Items>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
<>请注意:如果可能的话,考虑使用替代事件,它们会导致松散耦合。如果行为本身是项目中其他地方或可重用性理想的东西,那么引入a甚至可能是有意义的。好吧,那么你似乎陷入困境的地方是,你的列表框仍然以单列方式推送内容,并且没有能力给你一些东西,比如点击事件。所以我的想法更像这样
<ScrollViewer HorizontalScrollBarVisibility="Disabled" Height="300" HorizontalContentAlignment="Stretch">
<ItemsControl ItemsSource="{Binding Collection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Margin="5,0" Orientation="Horizontal">
<Image Source="{Binding MimeTypeIcon}" Stretch="None" />
<HyperlinkButton Margin="5,0,0,0" Text="{Binding File.Name}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
我不确定你想用你的放大镜和磁盘做什么,虽然我看到你点击了它们,但是你可以把它们添加到这个布局中,不管你喜欢什么,只是一个注释,我只是在会议之间自由使用它,所以从来没有建过它,但应该可以很好地工作。如果不行,我们就再插一次。主要的区别是变为h