Splitwirez / AvaloniaRibbon

Ribbon for avalonia
MIT License
101 stars 22 forks source link

Title bar is showing when using the ribbon inside a usercontrol #33

Closed PCB4u closed 2 years ago

PCB4u commented 2 years ago

The title bar is showing when using the ribbon inside a usercontrol:

image

Xaml:

<UserControl 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"
             xmlns:ribbon="clr-namespace:AvaloniaUI.Ribbon;assembly=AvaloniaUI.Ribbon"
             mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="200"
             x:Class="LaserWorks2.Controls.RibbonBar">
    <ribbon:Ribbon Name="ribbon">
        <ribbon:Ribbon.Tabs>
            <ribbon:RibbonTab Header="Home">
                <ribbon:RibbonTab.Groups>
                    <ribbon:RibbonGroupBox Header="Test Group 1" Command="{Binding OnClickCommand}" ribbon:KeyTip.KeyTipKeys="D1">
                        <ribbon:RibbonButton x:Name="RibbonButton1" Content="Button 1" MinSize="Medium" ToolTip.Tip="Button 1" ribbon:KeyTip.KeyTipKeys="A" CanAddToQuickAccess="True" LargeIcon="{DynamicResource Icon1Large}" Icon="{DynamicResource Icon1}" QuickAccessIcon="{DynamicResource Icon1QuickAccess}"/>
                        <ribbon:RibbonButton x:Name="RibbonButton2" Content="Button 2" MinSize="Medium" ToolTip.Tip="Button 2" ribbon:KeyTip.KeyTipKeys="B" LargeIcon="{DynamicResource Icon2Large}" Icon="{DynamicResource Icon2}" QuickAccessIcon="{DynamicResource Icon2QuickAccess}"/>
                        <ribbon:RibbonButton x:Name="RibbonButton3" Content="Button 3" MinSize="Medium" ToolTip.Tip="Button 3" ribbon:KeyTip.KeyTipKeys="C" LargeIcon="{DynamicResource Icon2Large}" Icon="{DynamicResource Icon2}" QuickAccessIcon="{DynamicResource Icon2QuickAccess}"/>
                    </ribbon:RibbonGroupBox>
                </ribbon:RibbonTab.Groups>
            </ribbon:RibbonTab>
        </ribbon:Ribbon.Tabs>
    </ribbon:Ribbon>
</UserControl>

Is it a bug or is there a way to remove it?

Splitwirez commented 2 years ago

@PCB4u Uh...that falls somewhere between a bug and a design flaw. It's a problem on my end either way.

For context...hat top space is normally where the Quick Access toolbar and contextual Tab group headers would appear, as highlighted here: image

However, if you aren't using either of those features, then I agree, there's no reason for the extra space.

Ultimately, this ought to be fixed on my end...but that doesn't help you right now, so if you're not using those features, and just want the Ribbon across the top of your window otherwise as normal, then the easiest fix would just be to set the Ribbon's Margin property inside your user control to 0,-34,0,0.

Alternatively, if you want it to look and behave like the sample app, that can be done in a somewhat user control-like manner, as follows: RibbonBar.axaml

<ribbon:Ribbon 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"
             xmlns:ribbon="clr-namespace:AvaloniaUI.Ribbon;assembly=AvaloniaUI.Ribbon"
             mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="200"
             x:Class="LaserWorks2.Controls.RibbonBar"
             Name="ribbon">
    <ribbon:Ribbon.Tabs>
        <ribbon:RibbonTab Header="Home">
            <ribbon:RibbonTab.Groups>
                <ribbon:RibbonGroupBox Header="Test Group 1" Command="{Binding OnClickCommand}" ribbon:KeyTip.KeyTipKeys="D1">
                    <ribbon:RibbonButton x:Name="RibbonButton1" Content="Button 1" MinSize="Medium" ToolTip.Tip="Button 1" ribbon:KeyTip.KeyTipKeys="A" CanAddToQuickAccess="True" LargeIcon="{DynamicResource Icon1Large}" Icon="{DynamicResource Icon1}" QuickAccessIcon="{DynamicResource Icon1QuickAccess}"/>
                    <ribbon:RibbonButton x:Name="RibbonButton2" Content="Button 2" MinSize="Medium" ToolTip.Tip="Button 2" ribbon:KeyTip.KeyTipKeys="B" LargeIcon="{DynamicResource Icon2Large}" Icon="{DynamicResource Icon2}" QuickAccessIcon="{DynamicResource Icon2QuickAccess}"/>
                    <ribbon:RibbonButton x:Name="RibbonButton3" Content="Button 3" MinSize="Medium" ToolTip.Tip="Button 3" ribbon:KeyTip.KeyTipKeys="C" LargeIcon="{DynamicResource Icon2Large}" Icon="{DynamicResource Icon2}" QuickAccessIcon="{DynamicResource Icon2QuickAccess}"/>
                </ribbon:RibbonGroupBox>
            </ribbon:RibbonTab.Groups>
        </ribbon:RibbonTab>
    </ribbon:Ribbon.Tabs>
</ribbon:Ribbon>

RibbonBar.axaml.cs

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using AvaloniaUI.Ribbon;

namespace LaserWorks2.Controls
{
    public class RibbonBar : Ribbon
    {
        public RibbonBar()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            AvaloniaXamlLoader.Load(this);
        }
    }
}

MainWindow.axaml

<ribbon:RibbonWindow xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:LaserWorks2.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:ctrl="using:LaserWorks2.Controls"
        xmlns:ribbon="clr-namespace:AvaloniaUI.Ribbon;assembly=AvaloniaUI.Ribbon"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="LaserWorks2.Views.MainWindow"
        SystemDecorations="None">
    <ribbon:RibbonWindow.Ribbon>
        <ctrl:RibbonBar/>
    </ribbon:RibbonWindow.Ribbon>
</ribbon:RibbonWindow>

MainWindow.axaml.cs

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using AvaloniaUI.Ribbon;

namespace LaserWorks2.Views
{
    public class MainWindow : RibbonWindow
    {
        public MainWindow()
        {
            InitializeComponent();
#if DEBUG
            this.AttachDevTools();
#endif
        }

        private void InitializeComponent()
        {
            AvaloniaXamlLoader.Load(this);
        }
    }
}

If you're doing anything more...unusual with the Ribbon or its placement, I'd need to know what in order to be able to suggest a more appropriate workaround. Knowing that would also be useful in determining how best to properly fix this on my end, once I'm able to get back to work on it...

PCB4u commented 2 years ago

Thanks thats a good workaround.

I need to add -8 because there was something showing under it then.

Margin="0,-34,0,-8"

image