我在我的应用程序中使用 wpf 列表框(VS 2012,C#)。我在进行多选时遇到问题,情况是列表框在列表框行上有按钮我可以使用此按钮打开新表单以及更新值此行的列表框,但如果我在列表框中选择了多行,则突出显示的行信息会丢失。例如:如果列表框有 5 行,如果我选择了第 2、3、4 行,如果我单击第 3 行的按钮打开弹出窗口向上窗口并执行更新操作。突出显示的信息在弹出窗口关闭时丢失。我能够在按钮的单击事件上获取选定行索引后面的代码中的信息。如何在后面的代码中应用此选定行事件以反映在用户界面上。
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);
}
任何帮助,将不胜感激。