Как добавить подпункт в Dropbox - PullRequest
2 голосов
/ 07 января 2020

У меня есть незавершенный проект, и мои первые шаги - изменить главное меню, которое основано на комбинированном окне и выглядит как в настольном приложении GitHub

Default view

Так что теперь задача состоит в том, чтобы сгруппировать подобные предметы в подгруппы.

Например, Просмотр журнала , Просмотр городов и Просмотр магазинов следует поместить в группу Администрирование . И годы 2017 ... 2020 должны быть отнесены к одной группе.

К сожалению, я не могу найти решение для этой задачи, возможно, ComboBox не лучшее решение для этого. Может быть, кто-то может дать мне направление, где мое решение? Это может быть или свернутая группа, или стиль меню, когда вложенные элементы отображаются справа от группы.

PS Администрирование и Администрирование таблицы года - это просто пустые элементы комбинированного списка. .

1 Ответ

0 голосов
/ 08 января 2020

Итак, мое решение основано на этих { ссылка }

Я добавил Expander в свой ComboBox, так что теперь все решение выглядит как

XAML:

<Window x:Class="WpfApp1_TEST.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1_TEST"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>

    <Grid>
        <Grid.Resources>
            <Style x:Key="GroupItem" TargetType="{x:Type GroupItem}">
                <Setter Property="Margin" Value="0,0,0,5"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GroupItem}">
                            <Expander x:Name="expander" 
                                      ExpandDirection="Down">

                                <Expander.Header>
                                    <DockPanel>
                                        <TextBlock Text="{Binding Name}" FontWeight="Bold" Margin="2,5,0,2" FontSize="14"/>
                                    </DockPanel>
                                </Expander.Header>
                                <Expander.Content>
                                    <Border Margin="5,0,0,0">
                                        <ItemsPresenter >
                                        </ItemsPresenter>
                                    </Border>
                                </Expander.Content>
                            </Expander>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Grid.Resources>
        <ComboBox Height="27" HorizontalAlignment="Left"  
                  ItemsSource="{Binding Item}"
                  Margin="162,109,0,0" VerticalAlignment="Top" 
                  Width="195" Name="cboGroup" >
            <ComboBox.GroupStyle>
                <GroupStyle ContainerStyle="{StaticResource GroupItem}"/>
            </ComboBox.GroupStyle>
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </Grid>

</Grid>

И код этой страницы

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        List<Item> items = new List<Item>();
        items.Add(new Item() { Name = "Item1", Category = "Category_1" });
        items.Add(new Item() { Name = "Item2", Category = "Category_1" });
        items.Add(new Item() { Name = "Item3", Category = "Category_1" });
        items.Add(new Item() { Name = "Item4", Category = "Category_2" });
        items.Add(new Item() { Name = "Item5", Category = "Category_2" });

        ListCollectionView lcv = new ListCollectionView(items);
        lcv.GroupDescriptions.Add(new PropertyGroupDescription("Category"));

        //this.comboBox.ItemsSource = lcv;
        this.cboGroup.ItemsSource = lcv;
    }

    public class Item
    {
        public string Name { get; set; }
        public string Category { get; set; }
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...