簡體   English   中英

WPF列表框所選項目調出另一個子列表框項目

[英]WPF Listbox selected item brings up another sub listbox items

我有一個獨特的要求,並且對WPF還是陌生的。 我有一個物品清單。 當我選擇一個項目時,它應該顯示子項目。
有很多方法可以做到這一點:
1.您使子列表框項目向下滑動,將父列表框項目向下移動。 周圍會有很多彈跳
2.為了避免高度變化,我認為可以彈出子列表框項,然后選擇子項。 如果沒有,那么我單擊離開並返回到我的父列表框項目。

我不知道從哪里開始在其父列表框項下面添加子列表框項。 我的XAML中有兩個列表框

<Window x:Class="MakeModel.MakeModelYear"
    Icon="cc_64x64_blue_02.ico"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MakeModel" 
    Title="Car Make and Model" Height="740.667" Width="426" Opacity="0.9" 
    WindowStartupLocation="CenterScreen" ResizeMode="CanResize" Background="White">
<Window.Resources>
</Window.Resources>
<Grid>
    <Grid.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFFFFE" Offset="0"/>
            <GradientStop Color="#FF6699CC" Offset="1.2"/>
        </LinearGradientBrush>
    </Grid.Background>
    <Grid.RowDefinitions>
        <RowDefinition Height="156*"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0*"/>
        <ColumnDefinition Width="53*"/>
        <ColumnDefinition Width="198*"/>
    </Grid.ColumnDefinitions>
    <StackPanel Margin="0,31,0,29" Grid.ColumnSpan="3">
        <GroupBox Header="Make / Model" BorderBrush="WhiteSmoke" BorderThickness="0" Margin="5,0" Foreground="#FF0B6C78" FontSize="18" FontFamily="Microsoft Sans Serif">
            <!--Task -->
            <StackPanel>
                <ListBox x:Name="cmbMake" HorizontalAlignment="Left" VerticalAlignment="Top" Width="387" Cursor="Arrow" 
                    ItemsSource="{Binding SelectedMake}" DisplayMemberPath ="Make" 
                    SelectionChanged="cmbMake_SelectionChanged" SelectionMode="Single" RenderTransformOrigin="0.494,1.409" Margin="0,3,0,0" Height="150" BorderBrush="#FF336699" FontFamily="Microsoft Sans Serif" FontSize="12" >
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="{x:Type ListBoxItem}">
                            <Style.Resources>
                                <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent"/>
                                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                            </Style.Resources>
                            <EventSetter Event="UIElement.MouseEnter" Handler="cmbFirstDigitLineItem_MouseMove" />
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True" >
                                    <Setter Property="Background" Value="#FFD7E1EC" />
                                </Trigger>
                                <Trigger Property="IsSelected" Value="True" >
                                    <Setter Property="FontWeight" Value="Bold" />
                                    <Setter Property="FontSize" Value="24" />
                                    <Setter Property="Foreground" Value="Black" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </ListBox.ItemContainerStyle>
                    <ListBox.Template>
                        <ControlTemplate>
                            <Border CornerRadius="5" BorderThickness="0" BorderBrush="#FF336699">
                                <ItemsPresenter/>
                            </Border>
                        </ControlTemplate>
                    </ListBox.Template>
                </ListBox>
            </StackPanel>
        </GroupBox>
    </StackPanel>
    <StackPanel Margin="0,205,0,29" Grid.ColumnSpan="3">
        <GroupBox Header="" BorderBrush="WhiteSmoke" BorderThickness="0" Margin="5,0">
            <!--Subtask -->
            <StackPanel>
                <ListBox x:Name="cmbModel" HorizontalAlignment="Left" VerticalAlignment="Top" Width="387" Cursor="Arrow" 
                    ItemsSource="{Binding SelectedModel}" DisplayMemberPath ="Model" 
                    SelectionChanged="cmbModel_SelectionChanged" SelectionMode="Single" RenderTransformOrigin="0.494,1.409" Margin="0,3,0,0" Background="#FFE0E0E0" BorderBrush="#FF336699" FontFamily="Arial">
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="{x:Type ListBoxItem}">
                            <Style.Resources>
                                <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent"/>
                                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                            </Style.Resources>
                            <EventSetter Event="UIElement.MouseEnter" Handler="cmbSecondDigitLineItem_MouseMove" />
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True" >
                                    <Setter Property="Background" Value="#FFD7E1EC" />
                                </Trigger>
                                <Trigger Property="IsSelected" Value="True" >
                                    <Setter Property="FontWeight" Value="Bold" />
                                    <Setter Property="FontSize" Value="24" />
                                    <Setter Property="Background" Value="Transparent" />
                                    <Setter Property="Foreground" Value="Black" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </ListBox.ItemContainerStyle>
                    <ListBox.Template>
                        <ControlTemplate>
                            <Border CornerRadius="5" BorderThickness="0" BorderBrush="#FF336699">
                                <ItemsPresenter/>
                            </Border>
                        </ControlTemplate>
                    </ListBox.Template>
                </ListBox>
            </StackPanel>
        </GroupBox>
    </StackPanel>
</Grid>
</Window>

好吧,讓我嘗試用簡單明了的英語解釋一下:)

首先,您應該讓您的課程如下:

public class Foo{

public ObservableCollection<MyParentObject> ListToBind {get;set;}

.... (rest of properties)
}

public class MyParentObject{

public ObservableCollection<MyChildObject> ChildListToBind {get;set;}
.... (rest of properties)
}

然后,在您的XAML中,您可以具有以下內容:

然后,作為Window或UserControl資源,您可以:

<DataTemplate x:key="listItemTemplate">
<Grid>
<ListBox ItemsSource={Binding ChildListToBind}" ItemTemplate="........"/>


</Grid>
</DataTemplate>

這不是完美的代碼...但是希望它可以讓您快速入門所需的內容。

問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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