[英]WPF Listbox multi selection
我在我的應用程序中使用wpf listbox(VS 2012,C#)。我在多重選擇時遇到了麻煩,方案是listbox在listbox行上有按鈕,我可以使用此按鈕打開新表單以及更新值該行的列表框,但是如果我在列表框上選擇了多行,則丟失了高亮顯示的行信息。例如:如果列表框有5行,那么如果我單擊row3的按鈕以打開彈出窗口,則選擇了第2、3、4行向上窗口並執行更新操作。突出顯示的信息在彈出窗口關閉時丟失。我能夠在按鈕的click事件上的選定行索引后面的代碼中獲取該信息。如何在代碼后面應用此選定行事件以進行反映在UI上。
XAML部分的樣式
<Style x:Key="AlternatingListViewItemStyle" TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="White"/>
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="DarkGray"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="ItemsControl.AlternationIndex" Value="0"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="LightBlue"/>
<Setter Property="Background" Value="LightBlue"/>
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="ItemsControl.AlternationIndex"
Value="1"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" Value="LightBlue"/>
<Setter Property="Background" Value="LightBlue"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue"/>
</Style.Resources>
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
<ListBox ItemsSource="{Binding Data}" ItemContainerStyle="{StaticResource AlternatingListViewItemStyle}" AlternationCount="2" SelectionMode="Multiple" >
.
.
.
.
</Listbox>
按鈕單擊事件代碼
List<int> selectedItemIndexes = (from object o in listBox.SelectedItems select listBox.Items.IndexOf(o)).ToList();
listBox.UnselectAll();
foreach (int rowIndex in selectedItemIndexes)
{
// listBox.SelectedIndex = rowIndex; // Tried this as well
listBox.SelectedItem = listBox.Items.GetItemAt(rowIndex);
}
任何幫助,將不勝感激。
您以這種方式獲得了所選項目,還需要以這種方式進行設置:
listBox.SelectedItems.Add( listBox.Items.GetItemAt(rowIndex) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.