RibbonTest.axaml代码

<RibbonWindow xmlns="https://github.com/avaloniaui"
        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"
        Height="800" Width="1380"
        x:Name="MainWindow"
        xmlns:local="using:AvaloniaUI"
        x:DataType="local:RibbonViewModel"
        x:Class="AvaloniaUI.RibbonTest"
        Icon="avares://AvaloniaUI/Resources/Images/avalonia-logo.ico"
        Title="RibbonTest">
    
    <RibbonWindow.DataContext>
        <local:RibbonViewModel/>
    </RibbonWindow.DataContext>
    
    <RibbonWindow.Resources>
        <Panel
            x:Key="Icon1"
            Width="14"
            Height="15"
            x:Shared="True">
            <Border
                Width="11"
                Height="12"
                Margin="0,2,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                BorderBrush="#FFFB983B"
                BorderThickness="1">
                <Border.Clip>
                    <PathGeometry>
                        <PathFigure IsClosed="True" StartPoint="0,0">
                            <LineSegment Point="2,0" />
                            <LineSegment Point="2,3" />
                            <LineSegment Point="9,3" />
                            <LineSegment Point="9,0" />
                            <LineSegment Point="11,0" />
                            <LineSegment Point="11,4" />
                            <LineSegment Point="6,4" />
                            <LineSegment Point="6,12" />
                            <LineSegment Point="0,12" />
                        </PathFigure>
                    </PathGeometry>
                </Border.Clip>
                <Border BorderBrush="#FFF8DB8F" BorderThickness="1" />
            </Border>
            <!--  M 2 3 L 2 1 L 3 1 L 4 0 L 6 0 L 7 1 L 8 1 L 8 3 Z  -->
            <Path
                Data="M 2.5 3.5 L 2.5 1.5 L 3.5 1.5 L 4.5 0.5 L 6.5 0.5 L 7.5 1.5 L 8.5 1.5 L 8.5 3.5 Z"
                Opacity="0.625"
                Stroke="{Binding $parent[TemplatedControl].Foreground}"
                StrokeThickness="1" />
            <Border
                Width="7"
                Height="9"
                HorizontalAlignment="Right"
                VerticalAlignment="Bottom"
                BorderBrush="{Binding $parent[TemplatedControl].Foreground}"
                BorderThickness="1">
                <StackPanel
                    VerticalAlignment="Center"
                    Opacity="0.75"
                    Orientation="Vertical"
                    Spacing="1">
                    <Rectangle
                        Width="3"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                    <Rectangle
                        Width="3"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                    <Rectangle
                        Width="3"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                </StackPanel>
            </Border>
        </Panel>
        <Panel
            x:Key="Icon1Large"
            Width="27"
            Height="30"
            Margin="0,0,1,0"
            x:Shared="True">
            <Border
                Width="21"
                Height="24"
                Margin="0,4,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                BorderBrush="#FFFB983B"
                BorderThickness="1">
                <Border.Clip>
                    <PathGeometry>
                        <PathFigure IsClosed="True" StartPoint="0,0">
                            <LineSegment Point="4,0" />
                            <LineSegment Point="4,3" />
                            <LineSegment Point="17,3" />
                            <LineSegment Point="17,0" />
                            <LineSegment Point="21,0" />
                            <LineSegment Point="21,7" />
                            <LineSegment Point="12,7" />
                            <LineSegment Point="12,24" />
                            <LineSegment Point="0,24" />
                        </PathFigure>
                    </PathGeometry>
                </Border.Clip>
                <Border BorderBrush="#FFF8DB8F" BorderThickness="1" />
            </Border>
            <Path
                Data="M 4.5 3.5 L 7.5 3.5 L 9.5 0.5 L 11.5 0.5 L 13.5 3.5 L 16.5 3.5 L 16.5 7.5 L 4.5 7.5 Z"
                Opacity="0.625"
                Stroke="{Binding $parent[TemplatedControl].Foreground}"
                StrokeThickness="1" />
            <Border
                Width="14"
                Height="18"
                HorizontalAlignment="Right"
                VerticalAlignment="Bottom"
                BorderBrush="{Binding $parent[TemplatedControl].Foreground}"
                BorderThickness="1">
                <StackPanel
                    VerticalAlignment="Center"
                    Opacity="0.75"
                    Orientation="Vertical"
                    Spacing="3">
                    <Rectangle
                        Width="6"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                    <Rectangle
                        Width="6"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                    <Rectangle
                        Width="6"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                </StackPanel>
            </Border>
        </Panel>
        <Panel
            x:Key="Icon1QuickAccess"
            Width="14"
            Height="15"
            x:Shared="True">
            <Border
                Width="11"
                Height="12"
                Margin="0,2,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                BorderBrush="{Binding $parent[TemplatedControl].Foreground}"
                BorderThickness="1">
                <Border.Clip>
                    <PathGeometry>
                        <PathFigure IsClosed="True" StartPoint="0,0">
                            <LineSegment Point="2,0" />
                            <LineSegment Point="2,3" />
                            <LineSegment Point="9,3" />
                            <LineSegment Point="9,0" />
                            <LineSegment Point="11,0" />
                            <LineSegment Point="11,4" />
                            <LineSegment Point="6,4" />
                            <LineSegment Point="6,12" />
                            <LineSegment Point="0,12" />
                        </PathFigure>
                    </PathGeometry>
                </Border.Clip>
            </Border>
            <Path
                Data="M 2.5 3.5 L 2.5 1.5 L 3.5 1.5 L 4.5 0.5 L 6.5 0.5 L 7.5 1.5 L 8.5 1.5 L 8.5 3.5 Z"
                Stroke="{Binding $parent[TemplatedControl].Foreground}"
                StrokeThickness="1" />
            <Border
                Width="7"
                Height="9"
                HorizontalAlignment="Right"
                VerticalAlignment="Bottom"
                BorderBrush="{Binding $parent[TemplatedControl].Foreground}"
                BorderThickness="1">
                <StackPanel
                    VerticalAlignment="Center"
                    Orientation="Vertical"
                    Spacing="1">
                    <Rectangle
                        Width="3"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                    <Rectangle
                        Width="3"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                    <Rectangle
                        Width="3"
                        Height="1"
                        Fill="{Binding $parent[TemplatedControl].Foreground}" />
                </StackPanel>
            </Border>
        </Panel>
        <Panel
            x:Key="Icon2"
            Width="16"
            Height="16"
            x:Shared="True">
            <Path
                Data="M 0.5 0.5 L 15.5 0.5 L 15.5 15.5 L 2.5 15.5 L 0.5 13.5 Z"
                Fill="#FFD998DD"
                Stroke="#FF563457"
                StrokeThickness="1" />
            <Border
                Width="10"
                Height="6"
                Margin="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Top"
                Background="White"
                BorderBrush="#7F563457"
                BorderThickness="1,0,1,1" />
            <Border
                Width="8"
                Height="5"
                Margin="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Bottom"
                Background="White"
                BorderBrush="#7F563457"
                BorderThickness="1,1,1,0" />
        </Panel>
        <Panel
            x:Key="Icon2Large"
            Width="27"
            Height="27"
            x:Shared="True">
            <Path
                Data="M 0.5 0.5 L 26.5 0.5 L 26.5 26.5 L 3.5 26.5 L 0.5 23.5 Z"
                Fill="#FFD998DD"
                Stroke="#FF563457"
                StrokeThickness="1" />
            <Border
                Width="19"
                Height="12"
                Margin="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Top"
                Background="White"
                BorderBrush="#7F563457"
                BorderThickness="1,0,1,1" />
            <Border
                Width="11"
                Height="7"
                Margin="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Bottom"
                Background="White"
                BorderBrush="#7F563457"
                BorderThickness="1,1,1,0" />
        </Panel>
        <Panel
            x:Key="Icon2QuickAccess"
            Width="16"
            Height="16"
            x:Shared="True">
            <Path
                Data="M 0.5 0.5 L 15.5 0.5 L 15.5 15.5 L 2.5 15.5 L 0.5 13.5 Z"
                Stroke="{Binding $parent[Button ].Foreground}"
                StrokeThickness="1" />
            <Border
                Width="10"
                Height="6"
                Margin="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Top"
                BorderBrush="{Binding $parent[TemplatedControl].Foreground}"
                BorderThickness="1,0,1,1" />
            <Border
                Width="8"
                Height="5"
                Margin="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Bottom"
                BorderBrush="{Binding $parent[TemplatedControl].Foreground}"
                BorderThickness="1,1,1,0" />
        </Panel>
    </RibbonWindow.Resources>

    <RibbonWindow.TitleBarBackground>
        <VisualBrush
            AlignmentX="Left"
            AlignmentY="Top"
            Stretch="UniformToFill">
            <VisualBrush.Visual>
                <Panel
                    Width="{Binding #MainWindow.Bounds.Width}"
                    Height="{Binding #MainWindow.Bounds.Height}"
                    Background="{DynamicResource FillBrush}">
                    <Panel.Resources>
                        <SolidColorBrush x:Key="FillBrush">#C02B579A</SolidColorBrush>
                        <SolidColorBrush x:Key="LineBrush">#FF274F8C</SolidColorBrush>
                        <!--  16000000  -->
                    </Panel.Resources>
                    <Panel.Styles>
                        <Style Selector="Path">
                            <Setter Property="Stroke" Value="{DynamicResource LineBrush}" />
                            <Setter Property="StrokeThickness" Value="4" />
                            <Setter Property="StrokeJoin" Value="Round" />
                        </Style>

                        <Style Selector="Ellipse">
                            <Setter Property="Fill" Value="{DynamicResource FillBrush}" />
                            <Setter Property="Stroke" Value="{DynamicResource LineBrush}" />
                            <Setter Property="StrokeThickness" Value="3" />
                            <Setter Property="Width" Value="10" />
                            <Setter Property="Height" Value="10" />
                        </Style>
                    </Panel.Styles>
                    <Canvas
                        Width="456"
                        Height="60"
                        HorizontalAlignment="Right"
                        VerticalAlignment="Top"
                        ClipToBounds="True">
                        <Path Data="M 14 6 L 194 6 L 249 45 L 340 45 L 362 21 L 480 21" />
                        <Ellipse Canvas.Left="9" Canvas.Top="1" />
                        <Ellipse Canvas.Left="168" Canvas.Top="1" />

                        <Path Data="M 5 50 L 93 50 L 117 33 L 208 33 L 233 50 L 394 50 L 436 -1" />
                        <Ellipse Canvas.Left="0" Canvas.Top="45" />
                        <Ellipse Canvas.Left="194" Canvas.Top="28" />

                        <Ellipse
                            Canvas.Left="13"
                            Canvas.Top="11"
                            Width="36"
                            Height="36"
                            Fill="Transparent"
                            StrokeThickness="6" />
                        <Path
                            Data="M 26 36 L 26 24 L 38 24"
                            StrokeJoin="Miter"
                            StrokeThickness="5" />
                        <Path
                            Data="M 26 24 L 38 36"
                            StrokeJoin="Miter"
                            StrokeThickness="5" />

                        <Ellipse
                            Canvas.Left="232"
                            Canvas.Top="-19"
                            Width="55"
                            Height="55"
                            Fill="Transparent"
                            StrokeThickness="6" />
                        <Path
                            Data="M 249 -4 L 269 -4 L 269 16"
                            StrokeJoin="Miter"
                            StrokeThickness="6" />
                        <Path
                            Data="M 269 -4 L 249 16"
                            StrokeJoin="Miter"
                            StrokeThickness="6" />
                    </Canvas>
                </Panel>
            </VisualBrush.Visual>
        </VisualBrush>
    </RibbonWindow.TitleBarBackground>

    <RibbonWindow.QuickAccessToolbar>
        <QuickAccessToolbar>
            <QuickAccessToolbar.RecommendedItems>
                <QuickAccessRecommendation Item="{Binding #RibbonSplitButton1}" />
                <QuickAccessRecommendation Item="{Binding #RibbonSplitButton2}" />
                <QuickAccessRecommendation Item="{Binding #RibbonSplitButton3}" />
            </QuickAccessToolbar.RecommendedItems>
        </QuickAccessToolbar>
    </RibbonWindow.QuickAccessToolbar>

    <RibbonWindow.Ribbon>
        <DesktopRibbon
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            Background="Transparent"
            DataContext="{Binding .}"
            Focusable="True"
            Orientation="{Binding RibbonOrientation}">

            <DesktopRibbon.Styles>
                <Style Selector="DesktopRibbon /template/ ContentControl#PART_GroupsPresenterHolder">
                    <Setter Property="Margin" Value="5,0" />
                    <Setter Property="CornerRadius" Value="5" />
                </Style>
                <Style Selector="CheckBox TextBlock">
                    <Setter Property="TextWrapping" Value="Wrap" />
                </Style>
                <Style Selector="RibbonGroupBox">
                    <Setter Property="Command" Value="{Binding OnClickCommand}" />
                    <Setter Property="CommandParameter" Value="{Binding Path=Header, RelativeSource={RelativeSource Mode=Self}}" />
                </Style>
                <Style Selector="RibbonButton,RibbonToggleButton">
                    <!--  ,ribbon|SplitButtonControl  -->
                    <Setter Property="Command" Value="{Binding OnClickCommand}" />
                    <Setter Property="CommandParameter" Value="{Binding Path=Content, RelativeSource={RelativeSource Mode=Self}}" />
                </Style>
                <Style Selector="RibbonButton[Size=Small],RibbonToggleButton[Size=Small]">
                    <!--  ,ribbon|SplitButtonControl[Size=Small]  -->
                    <Setter Property="CommandParameter" Value="{Binding Path=(ToolTip.Tip), RelativeSource={RelativeSource Mode=Self}}" />
                </Style>
                <Style Selector="SplitButtonControl">
                    <Setter Property="Command" Value="{Binding OnClickCommand}" />
                    <Setter Property="CommandParameter" Value="{Binding Path=Content, RelativeSource={RelativeSource Mode=Self}}" />
                </Style>
                <Style Selector="SplitButtonControl[Size=Small]">
                    <Setter Property="CommandParameter" Value="{Binding Path=(ToolTip.Tip), RelativeSource={RelativeSource Mode=Self}}" />
                </Style>
            </DesktopRibbon.Styles>

            <DesktopRibbon.HelpPaneContent>
                
                <StackPanel VerticalAlignment="Center" Orientation="{Binding RibbonOrientation}">
                    <RibbonComboBox Height="24" Content="ComboBox" />
                    <Button
                        Name="HelpButton"
                        Height="24"
                        HorizontalAlignment="Stretch"
                        Classes="RibbonHelpButton"
                        Command="{Binding HelpCommand}"
                        DockPanel.Dock="Bottom"
                        Focusable="False"
                        ToolTip.Tip="{DynamicResource AvaloniaRibbon.GetHelp}">
                        <TextBlock
                            Height="10"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Foreground="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}"
                            Text="?"
                            TextAlignment="Center" />
                    </Button>
                </StackPanel>
            </DesktopRibbon.HelpPaneContent>

            <DesktopRibbon.Menu>
                <RibbonMenu Width="50" KeyTip.KeyTipKeys="F">
                    <RibbonMenuItem
                        Group="File"
                        Header="New"
                        IsTopDocked="True">
                        <RibbonMenuItem.Icon>
                            <Rectangle
                                Width="32"
                                Height="32"
                                Fill="Red" />
                        </RibbonMenuItem.Icon>
                        <RibbonMenuItem.Content />
                    </RibbonMenuItem>
                    <RibbonMenuItem
                        Group="File"
                        Header="Open"
                        IsTopDocked="True">
                        <RibbonMenuItem.Icon>
                            <Rectangle
                                Width="32"
                                Height="32"
                                Fill="Green" />
                        </RibbonMenuItem.Icon>
                        <RibbonMenuItem.Content>
                            <DockPanel>
                                <TabControl DockPanel.Dock="Top">
                                    <TabItem Header="TEST" />
                                </TabControl>
                            </DockPanel>
                        </RibbonMenuItem.Content>
                    </RibbonMenuItem>
                    <RibbonMenuItem Header="Export">
                        <RibbonMenuItem.Icon>
                            <Rectangle
                                Width="32"
                                Height="32"
                                Fill="Purple" />
                        </RibbonMenuItem.Icon>
                    </RibbonMenuItem>
                    <RibbonMenuItem Header="Exit" IsBottomDocked="True">
                        <RibbonMenuItem.Icon>
                            <Rectangle
                                Width="32"
                                Height="32"
                                Fill="Brown" />
                        </RibbonMenuItem.Icon>
                    </RibbonMenuItem>
                </RibbonMenu>
            </DesktopRibbon.Menu>

            <DesktopRibbon.Tabs>
                <RibbonTab Header="Home" KeyTip.KeyTipKeys="B">
                    <RibbonTab.Groups>
                        <!--  Split Button Controls  -->
                        <RibbonGroupBox
                            Command="{Binding OnClickCommand}"
                            Header="SplitButtonControls"
                            KeyTip.KeyTipKeys="S">
                            <SplitButtonControl
                                x:Name="RibbonSplitButton1"
                                Content="Large"
                                Icon="{DynamicResource Icon1}"
                                LargeIcon="{DynamicResource Icon1Large}"
                                QuickAccessIcon="{DynamicResource Icon1QuickAccess}"
                                Size="Large">
                                <SplitButtonControl.Flyout>
                                    <MenuFlyout Placement="Bottom">
                                        <MenuItem Header="Item 1">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                        <MenuItem Header="Item 2" InputGesture="Ctrl+A">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                        <MenuItem Header="Item 3">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                    </MenuFlyout>
                                </SplitButtonControl.Flyout>
                            </SplitButtonControl>
                            
                            <SplitButtonControl
                                x:Name="RibbonSplitButton2"
                                Content="Medium"
                                Icon="{DynamicResource Icon2}"
                                LargeIcon="{DynamicResource Icon2Large}"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}"
                                Size="Medium">
                                <SplitButtonControl.Flyout>
                                    <MenuFlyout Placement="Bottom">
                                        <MenuItem Header="Item 1">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                        <MenuItem Header="Item 2" InputGesture="Ctrl+A">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                        <MenuItem Header="Item 3">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                    </MenuFlyout>
                                </SplitButtonControl.Flyout>
                            </SplitButtonControl>
                            
                            <SplitButtonControl
                                x:Name="RibbonSplitButton3"
                                Icon="{DynamicResource Icon2}"
                                LargeIcon="{DynamicResource Icon2Large}"
                                MaxSize="Small"
                                MinSize="Small"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}"
                                Size="Small"
                                ToolTip.Tip="Small">
                                <SplitButtonControl.Flyout>
                                    <MenuFlyout Placement="Bottom">
                                        <MenuItem Header="Item 1">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                        <MenuItem Header="Item 2" InputGesture="Ctrl+A">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                        <MenuItem Header="Item 3">
                                            <MenuItem Header="Subitem 1" />
                                            <MenuItem Header="Subitem 2" />
                                            <MenuItem Header="Subitem 3" />
                                        </MenuItem>
                                    </MenuFlyout>
                                </SplitButtonControl.Flyout>
                            </SplitButtonControl>
                        </RibbonGroupBox>
                        
                        <!--  Normal Button Controls  -->
                        <RibbonGroupBox
                            Command="{Binding OnClickCommand}"
                            Header="RibbonButtons"
                            KeyTip.KeyTipKeys="B">
                            <RibbonButton
                                Content="Large"
                                Icon="{DynamicResource Icon1}"
                                KeyTip.KeyTipKeys="U"
                                LargeIcon="{DynamicResource Icon1Large}"
                                MaxSize="Large"
                                MinSize="Large"
                                QuickAccessIcon="{DynamicResource Icon1QuickAccess}" />
                            <RibbonButton
                                Content="Medium"
                                Icon="{DynamicResource Icon2}"
                                KeyTip.KeyTipKeys="V"
                                LargeIcon="{DynamicResource Icon2Large}"
                                MaxSize="Medium"
                                MinSize="Medium"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}" />
                            <RibbonButton
                                Icon="{DynamicResource Icon2}"
                                KeyTip.KeyTipKeys="W"
                                LargeIcon="{DynamicResource Icon2Large}"
                                MaxSize="Small"
                                MinSize="Small"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}"
                                ToolTip.Tip="Small" />
                        </RibbonGroupBox>
                        
                        <!--  Toggle Button Controls  -->
                        <RibbonGroupBox
                            Command="{Binding OnClickCommand}"
                            Header="RibbonToggleButtons"
                            KeyTip.KeyTipKeys="T">
                            <RibbonToggleButton
                                Content="Large"
                                Icon="{DynamicResource Icon1}"
                                KeyTip.KeyTipKeys="X"
                                LargeIcon="{DynamicResource Icon1Large}"
                                MaxSize="Large"
                                MinSize="Large"
                                QuickAccessIcon="{DynamicResource Icon1QuickAccess}" />
                            <RibbonToggleButton
                                Content="Medium"
                                Icon="{DynamicResource Icon2}"
                                KeyTip.KeyTipKeys="Y"
                                LargeIcon="{DynamicResource Icon2Large}"
                                MaxSize="Medium"
                                MinSize="Medium"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}" />
                            <RibbonToggleButton
                                Icon="{DynamicResource Icon2}"
                                KeyTip.KeyTipKeys="Z"
                                LargeIcon="{DynamicResource Icon2Large}"
                                MaxSize="Small"
                                MinSize="Small"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}"
                                ToolTip.Tip="Small" />
                        </RibbonGroupBox>        
                        
                        <!--  DropDown Button Controls  -->
                        <RibbonGroupBox
                            Command="{Binding OnClickCommand}"
                            Header="RibbonDropDownButtons"
                            KeyTip.KeyTipKeys="S">
                            <RibbonDropDownButton
                                x:Name="LargeRibbonDropDownButton"
                                Content="Large"
                                Icon="{DynamicResource Icon1}"
                                LargeIcon="{DynamicResource Icon1Large}"
                                MaxSize="Large"
                                MinSize="Large"
                                QuickAccessIcon="{DynamicResource Icon1QuickAccess}">
                                <RibbonDropDownItem
                                    Command="{Binding OnClickCommand}"
                                    CommandParameter="RibbonDropDownButton Item 1"
                                    Header="Item 1">
                                    <RibbonDropDownItem.Icon>
                                        <Rectangle
                                            Width="16"
                                            Height="16"
                                            Fill="Red" />
                                    </RibbonDropDownItem.Icon>
                                </RibbonDropDownItem>
                                <RibbonDropDownSeparator />
                                <RibbonDropDownItem
                                    Command="{Binding OnClickCommand}"
                                    CommandParameter="RibbonDropDownButton Item 2"
                                    Header="Item 2">
                                    <RibbonDropDownItem.Icon>
                                        <Rectangle
                                            Width="16"
                                            Height="16"
                                            Fill="Green" />
                                    </RibbonDropDownItem.Icon>
                                </RibbonDropDownItem>
                                <RibbonDropDownItemsPresenter Header="Test">
                                    <RibbonButton Size="Small">
                                        <RibbonButton.Icon>
                                            <Rectangle
                                                Width="16"
                                                Height="16"
                                                Fill="Green" />
                                        </RibbonButton.Icon>
                                    </RibbonButton>
                                    <RibbonButton Content="Medium" Size="Medium">
                                        <RibbonButton.Icon>
                                            <Rectangle
                                                Width="16"
                                                Height="16"
                                                Fill="Red" />
                                        </RibbonButton.Icon>
                                    </RibbonButton>
                                    <RibbonButton Content="Large" Size="Large">
                                        <RibbonButton.LargeIcon>
                                            <Rectangle
                                                Width="16"
                                                Height="16"
                                                Fill="Purple" />
                                        </RibbonButton.LargeIcon>
                                    </RibbonButton>
                                </RibbonDropDownItemsPresenter>
                            </RibbonDropDownButton>
                            <RibbonDropDownButton
                                Content="Medium"
                                Icon="{DynamicResource Icon2}"
                                LargeIcon="{DynamicResource Icon2Large}"
                                MaxSize="Medium"
                                MinSize="Medium"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}">
                                <RibbonDropDownItem
                                    Command="{Binding OnClickCommand}"
                                    CommandParameter="RibbonDropDownButton Item 1"
                                    Header="Item 1">
                                    <RibbonDropDownItem.Icon>
                                        <Rectangle
                                            Width="16"
                                            Height="16"
                                            Fill="Red" />
                                    </RibbonDropDownItem.Icon>
                                </RibbonDropDownItem>
                                <RibbonDropDownItem
                                    Command="{Binding OnClickCommand}"
                                    CommandParameter="RibbonDropDownButton Item 2"
                                    Header="Item 2">
                                    <RibbonDropDownItem.Icon>

                                        <Rectangle
                                            Width="16"
                                            Height="16"
                                            Fill="Green" />
                                    </RibbonDropDownItem.Icon>
                                </RibbonDropDownItem>
                            </RibbonDropDownButton>
                            <RibbonDropDownButton
                                Icon="{DynamicResource Icon2}"
                                LargeIcon="{DynamicResource Icon2Large}"
                                MaxSize="Small"
                                MinSize="Small"
                                QuickAccessIcon="{DynamicResource Icon2QuickAccess}"
                                ToolTip.Tip="Small">
                                <RibbonDropDownItem
                                    Command="{Binding OnClickCommand}"
                                    CommandParameter="RibbonDropDownButton Item 1"
                                    Header="Item 1">
                                    <RibbonDropDownItem.Icon>

                                        <Rectangle
                                            Width="16"
                                            Height="16"
                                            Fill="Red" />
                                    </RibbonDropDownItem.Icon>
                                </RibbonDropDownItem>
                                <RibbonDropDownItem
                                    Command="{Binding OnClickCommand}"
                                    CommandParameter="RibbonDropDownButton Item 2"
                                    Header="Item 2">
                                    <RibbonDropDownItem.Icon>

                                        <Rectangle
                                            Width="16"
                                            Height="16"
                                            Fill="Green" />
                                    </RibbonDropDownItem.Icon>
                                </RibbonDropDownItem>
                            </RibbonDropDownButton>
                        </RibbonGroupBox>
                        
                        <!-- Combobox-->
                        <RibbonGroupBox Header="ComboBox">
                            <RibbonGroupWrapPanel Orientation="Vertical">
                                <RibbonGroupWrapPanel Orientation="Horizontal">
                                    <RibbonComboBox
                                        Content="With Icon"
                                        Icon="{StaticResource Icon1QuickAccess}"
                                        Size="Large">
                                        <ComboBoxItem>TEST</ComboBoxItem>
                                        <ComboBoxItem>ONE</ComboBoxItem>
                                        <ComboBoxItem>TWO</ComboBoxItem>
                                    </RibbonComboBox>
                                    <RibbonComboBox Content="Without Icon" Size="Large">
                                        <ComboBoxItem>TEST</ComboBoxItem>
                                        <ComboBoxItem>THREE</ComboBoxItem>
                                        <ComboBoxItem>FOUR</ComboBoxItem>
                                    </RibbonComboBox>
                                </RibbonGroupWrapPanel>
                                <RibbonComboBox HorizontalAlignment="Center" Size="Large">
                                    <RibbonComboBox.Content>
                                        <StackPanel Orientation="Horizontal">
                                            <ContentPresenter Content="{DynamicResource Icon2QuickAccess}" />
                                            <Label>Custom Content</Label>
                                        </StackPanel>
                                    </RibbonComboBox.Content>
                                    <ComboBoxItem>TEST</ComboBoxItem>
                                    <ComboBoxItem>THREE</ComboBoxItem>
                                    <ComboBoxItem>FOUR</ComboBoxItem>
                                </RibbonComboBox>
                            </RibbonGroupWrapPanel>
                        </RibbonGroupBox>

                        <!--Large Gallery-->
                        <RibbonGroupBox
                            Command="{Binding OnClickCommand}" Header="Large gallery" KeyTip.KeyTipKeys="L">
                            <Gallery Size="Large">
                                <GalleryItem Content="Item 1">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="Red" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 2">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="OrangeRed" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 3">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="Orange" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 4">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="Yellow" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 5">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="GreenYellow" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 6">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="YellowGreen" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 7">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="Green" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 8">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="Turquoise" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 9">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="Cyan" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 10">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="SkyBlue" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 11">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="Blue" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                                <GalleryItem Content="Item 12">
                                    <GalleryItem.LargeIcon>

                                        <Rectangle
                                            Width="32"
                                            Height="32"
                                            Fill="BlueViolet" />
                                    </GalleryItem.LargeIcon>
                                </GalleryItem>
                            </Gallery>
                        </RibbonGroupBox>
                    </RibbonTab.Groups>
                </RibbonTab>
            </DesktopRibbon.Tabs>
        </DesktopRibbon>
    </RibbonWindow.Ribbon>
    
    <!--Main Content-->
    <StackPanel Orientation="Vertical">
        <Label FontWeight="Bold">Ribbon Orientation</Label>
        <ToggleSwitch
            x:Name="OrientationToggleSwitch"
            IsChecked="{Binding SwitchOrientation}"
            OffContent="Vertical"
            OnContent="Horizontal" />
    </StackPanel>
</RibbonWindow>

RibbonTest.axaml.cs代码

using Avalonia;
using Avalonia.Controls;
using Avalonia.Layout;
using Avalonia.Markup.Xaml;
using AvaloniaUI.Ribbon.Desktop;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;

namespace AvaloniaUI;

public partial class RibbonViewModel : ObservableObject
{
    [ObservableProperty] private string help = "Help requested!";

    [ObservableProperty] private Orientation ribbonOrientation = Orientation.Horizontal;

    [ObservableProperty] private SystemDecorations selectedDecoration;

    [ObservableProperty] private bool switchOrientation = true;
    public string Greeting => "Welcome to Avalonia!";

    public RibbonViewModel()
    {
    }

    public void HelpCommand(object parameter)
    {
        Console.WriteLine(Help);
    }

    [RelayCommand]
    public void OnClickCommand(object parameter)
    {
        var paramString = "[NO CONTENT]";

        if (parameter != null)
        {
            if (parameter is string str)
                paramString = str;
            else
                paramString = parameter.ToString();
        }

        Console.WriteLine("OnClickCommand invoked: " + paramString);
    }

    partial void OnSwitchOrientationChanged(bool value)
    {
        if (value)
            RibbonOrientation = Orientation.Horizontal;
        else
            RibbonOrientation = Orientation.Vertical;
    }
}

public partial class RibbonTest : RibbonWindow
{
    public RibbonTest()
    {
        InitializeComponent();
    }
}

运行效果

image

 

posted on 2026-04-28 12:08  dalgleish  阅读(2)  评论(0)    收藏  举报