- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎无法清除数据绑定(bind) WPF ListBox 的 SelectedItems 集合。我尝试调用 ListBox.SelectedItems.Clear(),尝试将 SelectedIndex 设置为 -1,将 SelectedItem 设置为 null 并调用 ListBox.UnselectAll()。在调试时,似乎要么没有分配任务,要么正在重置 SelectedItems 集合,但我不确定是什么。我在 SelectionChanged 回调中放置了一个断点,它永远不会被意外击中,但 SelectedItems.Count 成员始终至少为 1(有时大于 1,因为此 ListBox 的选择模式是 MultiExtended)。
有没有人见过这个并且知道我做错了什么?这个问题似乎与这个问题完全相同:
WPF - How to clear selection from ListView?
除了在那篇文章中,Sonny Boy 使用的是 ListView,而我使用的是 ListBox。无论如何,投票的答案是调用 ListView.UnselectAll() 这在我的情况下不起作用。
我觉得我必须做一些非常明显错误的事情,因为清除选择应该非常简单。
注意:为了清楚起见,我不想从 ListBox 中删除选择,我只想不选择任何内容。
谢谢!
<ListBox Background="{StaticResource ResourceKey=DarkGray}" Name="lbx_subimageThumbnails" Margin="6,6,6,0" ItemsSource="{Binding ElementName=lbx_thumbnails, Path=SelectedItem.Swatches}" Style="{StaticResource WPTemplate}" SelectionMode="Extended" Height="{Binding ElementName=sld_swatchRows, Path=Value}" VerticalAlignment="Top" SelectionChanged="lbx_subimageThumbnails_SelectionChanged" DataContext="{Binding}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel HorizontalAlignment="Stretch" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Visibility" Value="{Binding Path=Vis}" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="270" Height="270" Margin="5,5,5,5" Tag="{Binding}" Name="lbx_swatchThumbnail" Background="{StaticResource ResourceKey=LightGray}" PreviewMouseLeftButtonDown="lbx_swatchThumbnail_PreviewMouseLeftButtonDown" PreviewMouseMove="lbx_swatchThumbnail_PreviewMouseMove">
<Grid.LayoutTransform>
<ScaleTransform CenterX="0" CenterY="0" ScaleX="0.50" ScaleY="0.50" />
</Grid.LayoutTransform>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Sync selected" Click="btn_syncSwatch_Click" />
<MenuItem Header="Re-export selected" Click="btn_exportSelected_Click"/>
<MenuItem Header="Set as default thumbnail" Click="btn_setThumbnail_Click"/>
<MenuItem Header="Delete selected" Click="btn_deleteSwatch_Click"/>
<MenuItem Header="Show in Explorer" Click="mnu_showSwatchesInExplorer_Click" />
<MenuItem Header="Create Frames" Click="mnu_createFrames_Click" ToolTip="Creates FRAMEs groups to your PSD file under the Group associated with the selected swatch. DO NOT RE-ORDER OR RENAME THE GENERATED groups!" />
<MenuItem Header="Create MIPs" Click="mnu_createMIPs_Click" ToolTip="Creates MIPs groups to your PSD file under the Group associated with the selected swatch. DO NOT RE-ORDER OR RENAME THE GENERATED groups!" />
</ContextMenu>
</Grid.ContextMenu>
<Border BorderBrush="Black" BorderThickness="1">
<Grid ToolTip="{Binding Path=Texture}">
<Image VerticalAlignment="Center" HorizontalAlignment="Center" PhotoLoader:Loader.DisplayOption="Preview" PhotoLoader:Loader.DisplayWaitingAnimationDuringLoading="True" PhotoLoader:Loader.Source="{Binding Path=Texture}" PhotoLoader:Loader.DisplayErrorThumbnailOnError="True" Width="256" Height="256" />
<TextBlock VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,10,0,0" FontSize="20" Text="{Binding Path=Group}" Background="Black" Foreground="White"/>
<TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Background="Black" Margin="0,0,0,10" FontSize="20" Foreground="White">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} x {1} {2}" >
<Binding Path="Width" />
<Binding Path="Height" />
<Binding Path="Format" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
// this callback kicks everything off.
private void btn_editSwatch_Click(object sender, RoutedEventArgs e)
{
// get a list of the selected indices - we will have to unselect the texture source and reselect it after the re-export in order to force the thumbnail display to update
// so we will save a list of indices to reselect them after the export
List selectedIndices = new List();
for (int i = 0; i < lbx_subimageThumbnails.Items.Count; i++)
{
if (lbx_subimageThumbnails.SelectedItems.Contains(lbx_subimageThumbnails.Items[i]))
{
selectedIndices.Add(i);
}
}
// store the index of the selected texture source to reselect it after the re-export
int selIndex = lbx_thumbnails.SelectedIndex;
// edit and re-export the selected thumbnails
if (this.EditThumbnails(lbx_subimageThumbnails.SelectedItems, lbx_thumbnails.SelectedItem))
{
// re-select the texture source
lbx_thumbnails.SelectedIndex = selIndex;
// re-select the previously selected thumbnails.
foreach (int index in selectedIndices)
{
if (!lbx_subimageThumbnails.SelectedItems.Contains(lbx_subimageThumbnails.Items[index]))
{
lbx_subimageThumbnails.SelectedItems.Add(lbx_subimageThumbnails.Items[index]);
}
}
}
}
private void lbx_subimageThumbnails_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBox textureSelector = sender as ListBox;
if (textureSelector != null)
{
//update some UI elements
}
}
/*
this is the SelectionChanged callback for another listbox which is bound as the ItemSource of lbx_subimageThumbnails. When the selection here changes, we default the selection of the subimage listbox to the first subimage after first clearing the selected items in the subimage listbox
*/
private void lbx_thumbnails_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// clear the previous swatch selection and select the first thumbnail
// None of these methods works. after each, lbx_subimageThumbnails.SelectedItems.Count is still >= 1
// Also, trying to set the SelectedIndex doesn't take. After the assignment, debugger shows
// SelectedIndex is still 0
lbx_subimageThumbnails.SelectedIndex = -1;
lbx_subimageThumbnails.SelectedIndex = -1;
// Trying to set SelectedItem to null doesn't work...after assignment, SelectedItem is still a vaild
// reference
this.lbx_subimageThumbnails.SelectedItem = null;
if (lbx_subimageThumbnails.SelectedItems.Count > 0)
{
lbx_subimageThumbnails.UnselectAll();
lbx_subimageThumbnails.SelectedItems.Clear();
}
lbx_subimageThumbnails.SelectedIndex = 0;
// reset the preview pane size
sld_previewSize.Value = 1.0;
}
最佳答案
你是否覆盖了Equals()
和 GetHashCode()
在 ListBox 中的项目上?我可以通过以下方式复制它:
选择列表中的项目。
更改项目的属性会导致其哈希码发生更改。
选择不同的项目。
第一项未从
SelectedItems
中删除并且不能按照您描述的方式手动删除。即使
SelectionMode
是单一的,如果您重新选择第一项,将导致抛出异常。
关于wpf - 无法清除 WPF ListBox.SelectedItems 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16181974/
假设我有一系列值: Customer | Services | Cost | Paid Mel | Abc | $1.00 | TRUE Mel | Def
我试图让 ListBox 中的项目跨越 ListBox 的整个宽度。我发现了几篇处理 HorizontalContentAlignment="Stretch"的帖子,但我无法让它在我的 WP7 应
我有一个 ListBox,所以我可以使用绑定(bind)。我是 Silverlight 的新手,所以也许还有另一种方法。我只想在模板中显示项目列表。我不需要它是可缩放的,因为它适合屏幕。这是马代码:
我有一个带有多列列表框和组合框的用户窗体。 ListBox 默认显示完整的数据集。 ComboBox 包含来自 ListBox 中某一列的值。从 ComboBox 中选择一个值会过滤 ListBox
我使用以下方法将目录枚举到 ListBox 中: private void TE_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
我有一个列表框,每个列表项中都有一堆控件。
我有 2 个列表框,如果您单击顶部的一个项目,那么底部的一个会过滤到一些结果。 我正在尝试学习 WPF 和 MVVM,并且想知道这是否是正确的方法。这是最好的方法吗? 这是我所做的: class Vi
我的原型(prototype)显示包含“页面”的“文档”由缩略图表示。每个文档可以有任意数量的页面。例如,可能有1000 个文档,每个文档 5 页,或 5 个文档,每个文档 1000 页每个,或介于两
假设我需要显示一个包含大量记录的列表,哪个控件更好?或者说,哪个控件的滚动体验更好? 我看到很多人报告了这个 LongListSelector 的问题,它真的有太多问题而无法使用吗? 希望有人能为我阐
我想在双击列表框中的项目时创建视觉效果。到目前为止,我具有拖放功能,其中项目在视觉上附加到鼠标,并且可以移动到放置目标。通过该功能,我可以使用获取项目容器的相同逻辑为项目设置动画,但是我无法离开项目控
我想在 dataTemplate 中使用 dataTemplale。我想像这样在列表框中显示数据: 这就是我得到的。它不起作用。 cl
如果这些值存在于另一个 ListBox 中,我将尝试从 ListBox 中删除数字项。我的代码似乎不起作用,而且我无法在线找到任何帮助。 ListBox1 由 Array 填充,ListBox2 由
是否可以在 C# 中将 ListBox.SelectedObjectCollection 转换为 ListBox.ObjectCollection?如果是这样,我该怎么做? 最佳答案 我有一个接受 L
我正在开发一个 WinForms 项目,其中有一个 TextBox用户可以在其中输入搜索查询,以及 ListBox其中所有项目都是可见的,并且匹配的项目突出显示。 当我遍历 ListBox.Items
除了一个问题,我手头的任务几乎完成了。我正在尝试通过 beginupdate() 和 endupdate() 通过 backgroundWorker 线程控制列表框 ui 的更新,该线程也用于更新我的
我有一个 Windows 窗体应用程序,在同一个窗体上有两个 ListBox 控件。他们都将 SelectionMode 设置为“MultiExtended”。 当我改变其中一个的选择时,其他的选择也
我正在动态创建一个 Winforms 多选列表框并将其添加到流程面板控件中。我从我创建的对象绑定(bind)了一个数据源,并验证了 DataSource 实际上确实有大约 14 个元素。当我执行 li
我想让 ListItems 的橙色背景扩展到列表框的整个宽度。 目前它们的宽度仅为名字 + 姓氏。 我已将所有元素设置为:HorizontalAlignment="Stretch"。 我希望 Li
我有一个带有自定义模板的普通列表框来显示项目。我无法管理的是在列表框的整个宽度上水平拉伸(stretch)模板。 我的问题是,主窗口中的所有元素都是动态放置的,并且它们会随着窗口大小更改方法的大小而调
嗯,嗯,这意味着一些行的大小应该是两行的。我的老板认为这是更简单的解决方案,而不是将显示的文本限制为适合宽度并且不喜欢水平滚动条 >_< 最佳答案 lst.DrawMode = System.Wind
我是一名优秀的程序员,十分优秀!