我有一个相当经典的UI情况 - 两个ListBoxes命名SelectedItems和AvailableItems- 这个想法是你已经选择SelectedItems的项目存在,而可用于添加的项目SelectedItems(即每个尚未存在的项目)都存在AvailableItems.
此外,我有<和>按钮将当前选择从一个列表移动到另一个列表(除了双击,它工作正常).
是否可以在WPF中设置样式/触发器以启用或禁用移动按钮,具体取决于在ListBox中选择的任何内容?SelectedItems在左侧,因此<按钮会将所选内容移动AvailableItems到该列表.但是,如果没有选择任何项目(AvailableItems.SelectedIndex == -1),我希望禁用此按钮(IsEnabled == false) - 而另一个列表/按钮则相反.
这可以直接在XAML中完成,还是需要在代码隐藏中创建复杂的逻辑来处理它?
我有一个ListBox,它的ItemTemplate绑定到DataTemplate.我的问题是我无法将模板中的元素拉伸到ListBox的整个宽度.
<ListBox x:Name="listPeople" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Margin="0,0,0,0" Background="{x:Null}" SelectionMode="Extended" Grid.Row="1"
ItemTemplate="{StaticResource PersonViewModel.BrowserDataTemplate}"
ItemsSource="{Binding Mode=OneWay, Path=SearchResults}" >
</ListBox>
<DataTemplate x:Key="PersonViewModel.BrowserDataTemplate">
<ListBoxItem HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5,5,5,5">
<Border Opacity=".1" x:Name="itemBorder" Background="#FF000000"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
CornerRadius="5,5,5,5" MinWidth="100" Height="50"/>
</Grid>
</ListBoxItem>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如您所见,我在网格中添加了一个边框以指示模板的宽度.我的目标是看到此边框扩展到列表框的整个宽度.目前它的宽度由其内容或MinWidth决定,这是目前保持可见的唯一内容.
单击CheckBox时,我需要选择ListBox中的所有项目.是否可以使用一行代码选择ListBox中的所有项目?或者我是否必须遍历所有项目并将其中的每一项设置为true?
谢谢 :)
假设我有一个ListBox绑定ObservableCollection,我想动画添加/删除ListBoxItems例如.FadeIn/Out,SlideDown/Up等.我该怎么做?
当我ListBox使用水平项目创建时,例如:
<DockPanel>
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBoxItem>
<Button Content="Hello" />
</ListBoxItem>
<ListBoxItem>
<Button Content="Hello" />
</ListBoxItem>
</ListBox>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
我在列表中的按钮之间有小间隙,如下图中的箭头所示:

我怎么能摆脱这些差距呢?我需要ListBox彼此相邻的物品.我试图改变ItemTemplate的ListBox,但它并没有帮助.
我想在我的自定义库中显示存储在Windows Phone 8照片文件夹中的所有图像,该图库ListBox用于显示图像.
的ListBox代码如下:
<phone:PhoneApplicationPage.Resources>
<MyApp:PreviewPictureConverter x:Key="PreviewPictureConverter" />
</phone:PhoneApplicationPage.Resources>
<ListBox Name="previewImageListbox" VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel CleanUpVirtualizedItemEvent="VirtualizingStackPanel_CleanUpVirtualizedItemEvent_1">
</VirtualizingStackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Image Source="{Binding Converter={StaticResource PreviewPictureConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
使用以下转换器:
public class PreviewPictureConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
PreviewImageItem c = value as PreviewImageItem;
if (c == null)
return null;
return c.ImageData;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) …Run Code Online (Sandbox Code Playgroud) 我有一个WPF应用程序ListBox.拖动机制已经实现,但是当列表太长并且我想将项目移动到不可见的位置时我不能.
例如,屏幕显示10个项目.我有20件物品.如果我想将最后一项拖到第一个位置,我必须拖到顶部并放下.向上滚动并再次拖动.
如何进行ListBox自动滚动?
我的原型显示"文档",其中包含由缩略图图像表示的"页面".每个文档可以包含任意数量的页面.例如,可能有1000个文档,每个文档有5个页面,或者5个文档,每个文档有1000个页面,或者介于两者之间.文件不包含其他文件.在我的xaml标记中,我有一个ListBox,其ItemsTemplate
引用的innerItemsTemplate也有一个ListBox.我想要2级选定的项目,以便我可以对文档或页面执行各种操作(删除,合并,移动到新位置等).innerItemsTemplate ListBox使用a WrapPanel作为ItemsPanelTemplate.
对于我有大量文档的情况,每个文档都有几个页面(比如10000个文档,每个页面有5个页面),滚动工作非常好,这要归功于UI虚拟化VirtualizingStackPanel.但是,如果我有大量的页面,我会遇到问题.具有1000页的文档一次仅显示约50个(无论何种适合屏幕),当我向下滚动时,外部ListBox移动到下一个文档,跳过不可见的950页左右.除此之外,VirtualzingWrapPanel应用程序内存确实没有
增加.
我想知道我是否以正确的方式解决这个问题,特别是因为它有点难以解释!我希望能够显示10000个文档,每个文档1000页(仅显示适合屏幕的任何内容),使用UI虚拟化,以及平滑滚动.
如何在显示下一个文档之前确保滚动在文档中的所有页面中移动,并且仍然保持UI虚拟化?滚动条似乎只移动到下一个文档.
表示"文档"和"页面"似乎合乎逻辑 - 使用我当前ListBox在a 中使用a的方法ListBox?
我非常感谢你的任何想法.谢谢.
我有一个usercontrol,它有一个scrollviewer,然后是一堆子控件,如文本框,单选按钮和列表框等.我可以使用鼠标滚轮滚动父滚动查看器,直到我的鼠标落入列表框,然后,鼠标滚轮事件开始进入列表框.是否有任何方法让列表框将这些事件发送回父控件?从父控件的内侧删除列表框就像这个问题所示(当ScrollViewer的子控件超过时鼠标滚轮不工作)不是一个解决方案.
我试过了
void ListBox_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
但那也没有用.
谢谢
我有一个已排序的列表框,需要显示每个项目的行号.在这个演示中,我有一个带有Name字符串属性的Person类.列表框显示按名称排序的人员列表.如何添加到列表框的datatemplate行号?
XAML:
<Window x:Class="NumberedListBox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<ListBox
ItemsSource="{Binding Path=PersonsListCollectionView}"
HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Window>
Run Code Online (Sandbox Code Playgroud)
代码背后:
using System;
using System.Collections.ObjectModel;
using System.Windows.Data;
using System.Windows;
using System.ComponentModel;
namespace NumberedListBox
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Persons = new ObservableCollection<Person>();
Persons.Add(new Person() { Name = "Sally"});
Persons.Add(new Person() { Name = "Bob" });
Persons.Add(new Person() { Name = "Joe" });
Persons.Add(new Person() { Name = "Mary" });
PersonsListCollectionView = …Run Code Online (Sandbox Code Playgroud) listbox ×10
wpf ×7
c# ×5
.net ×2
scroll ×2
.net-2.0 ×1
animation ×1
datatemplate ×1
drag ×1
listview ×1
scrollwheel ×1
silverlight ×1
winforms ×1
wpf-controls ×1