簡體   English   中英

WPF列表框多選

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM