Explorar o código

Added an example of dynamic menus to the ControlCatalog.

Creates a menu using `DataTemplates` on the MenuPage.
Steven Kirk %!s(int64=7) %!d(string=hai) anos
pai
achega
4f11ecdd38

+ 7 - 2
samples/ControlCatalog/App.xaml

@@ -14,6 +14,11 @@
       <Setter Property="FontSize" Value="13"/>
     </Style>
 
-    <StyleInclude Source="resm:ControlCatalog.SideBar.xaml"/>
+      <Style Selector="TextBlock.h3">
+          <Setter Property="Foreground" Value="#a2a2a2"/>
+          <Setter Property="FontSize" Value="13"/>
+      </Style>
+
+      <StyleInclude Source="resm:ControlCatalog.SideBar.xaml"/>
   </Application.Styles>
-</Application>
+</Application>

+ 37 - 22
samples/ControlCatalog/Pages/MenuPage.xaml

@@ -7,29 +7,44 @@
               Margin="0,16,0,0"
               HorizontalAlignment="Center"
               Spacing="16">
-            <Menu>
-                <MenuItem Header="_First">
-                    <MenuItem Header="Standard _Menu Item"/>
-                    <Separator/>
-                    <MenuItem Header="Menu with _Submenu">
-                        <MenuItem Header="Submenu _1"/>
-                        <MenuItem Header="Submenu _2"/>
+            <StackPanel>
+                <TextBlock Classes="h3" Margin="4 8">Defined in XAML</TextBlock>
+                <Menu>
+                    <MenuItem Header="_First">
+                        <MenuItem Header="Standard _Menu Item"/>
+                        <Separator/>
+                        <MenuItem Header="Menu with _Submenu">
+                            <MenuItem Header="Submenu _1"/>
+                            <MenuItem Header="Submenu _2"/>
+                        </MenuItem>
+                        <MenuItem Header="Menu Item with _Icon">
+                            <MenuItem.Icon>
+                                <Image Source="resm:ControlCatalog.Assets.github_icon.png"/>
+                            </MenuItem.Icon>
+                        </MenuItem>
+                        <MenuItem Header="Menu Item with _Checkbox">
+                            <MenuItem.Icon>
+                                <CheckBox BorderThickness="0" IsHitTestVisible="False" IsChecked="True"/>
+                            </MenuItem.Icon>
+                        </MenuItem>
                     </MenuItem>
-                    <MenuItem Header="Menu Item with _Icon">
-                        <MenuItem.Icon>
-                            <Image Source="resm:ControlCatalog.Assets.github_icon.png"/>
-                        </MenuItem.Icon>
+                    <MenuItem Header="_Second">
+                        <MenuItem Header="Second _Menu Item"/>
                     </MenuItem>
-                    <MenuItem Header="Menu Item with _Checkbox">
-                        <MenuItem.Icon>
-                            <CheckBox BorderThickness="0" IsHitTestVisible="False" IsChecked="True"/>
-                        </MenuItem.Icon>
-                    </MenuItem>
-                </MenuItem>
-                <MenuItem Header="_Second">
-                    <MenuItem Header="Second _Menu Item"/>
-                </MenuItem>
-            </Menu>
+                </Menu>
+            </StackPanel>
+
+            <StackPanel>
+                <TextBlock Classes="h3" Margin="4 8">Dyanamically generated</TextBlock>
+                <Menu Items="{Binding}">
+                    <Menu.Styles>
+                        <Style Selector="MenuItem">
+                            <Setter Property="Header" Value="{Binding Header}"/>
+                            <Setter Property="Items" Value="{Binding Items}"/>
+                        </Style>
+                    </Menu.Styles>
+                </Menu>
+            </StackPanel>
         </StackPanel>
     </StackPanel>
-</UserControl>
+</UserControl>

+ 28 - 0
samples/ControlCatalog/Pages/MenuPage.xaml.cs

@@ -1,3 +1,4 @@
+using System.Collections.Generic;
 using Avalonia.Controls;
 using Avalonia.Markup.Xaml;
 
@@ -8,6 +9,27 @@ namespace ControlCatalog.Pages
         public MenuPage()
         {
             this.InitializeComponent();
+            DataContext = new[]
+            {
+                new MenuItemViewModel
+                {
+                    Header = "_File",
+                    Items =
+                    {
+                        new MenuItemViewModel { Header = "_Open..." },
+                        new MenuItemViewModel { Header = "Save" },
+                    }
+                },
+                new MenuItemViewModel
+                {
+                    Header = "_Edit",
+                    Items =
+                    {
+                        new MenuItemViewModel { Header = "_Copy" },
+                        new MenuItemViewModel { Header = "_Paste" },
+                    }
+                }
+            };
         }
 
         private void InitializeComponent()
@@ -15,4 +37,10 @@ namespace ControlCatalog.Pages
             AvaloniaXamlLoader.Load(this);
         }
     }
+
+    public class MenuItemViewModel
+    {
+        public string Header { get; set; }
+        public IList<MenuItemViewModel> Items { get; } = new List<MenuItemViewModel>();
+    }
 }