C# 将窗口标题替换为MahApps.Metro无边框窗口的菜单

C# 将窗口标题替换为MahApps.Metro无边框窗口的菜单,c#,wpf,xaml,mahapps.metro,C#,Wpf,Xaml,Mahapps.metro,我正在用MahApps.Metro控件开发一个无边框的WPF窗口应用程序 我想让我的菜单在窗口标题的正常位置(标题栏的左侧)。如下图所示: 到目前为止,我得到的结果如下图所示: 我已尝试设置HorizontalAlignment=“Left”,但菜单组仍保留在标题栏的右侧 代码: <Controls:MetroWindow.WindowCommands> <Controls:WindowCommands HorizontalAlignment="Le

我正在用
MahApps.Metro
控件开发一个无边框的WPF窗口应用程序

我想让我的菜单在窗口标题的正常位置(标题栏的左侧)。如下图所示:

到目前为止,我得到的结果如下图所示:

我已尝试设置
HorizontalAlignment=“Left”
,但菜单组仍保留在标题栏的右侧

代码:

<Controls:MetroWindow.WindowCommands>        
    <Controls:WindowCommands HorizontalAlignment="Left">
        <Menu IsMainMenu="True" x:Name="mnuMainMenu" Height="28" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="12" Background="Transparent" Width="Auto" >

            <MenuItem Header="_File" x:Name="mnuFile" Visibility="Visible" Background="Transparent">
                <MenuItem Header="_Open" x:Name="mnuOpen" Background="Transparent" Command="{Binding MenuOpenCommand}" />

                <MenuItem Header="_Exit" x:Name="mnuExit" Click="btnExit_Click" Background="Transparent"/>
            </MenuItem>

            <MenuItem Header="_Tools">
                <MenuItem Header="_Repeat" x:Name="mnuRepete" Background="Transparent" >
                    <MenuItem Header="Repeat None" Command="{Binding RepeatNoneCommand}" IsCheckable="True"/>
                    <MenuItem Header="Repeat One" Command="{Binding RepeatOneCommand}" IsCheckable="True"/>
                    <MenuItem Header="Repeat All" Command="{Binding RepeatAllCommand}" IsCheckable="True"/>
                </MenuItem>
            </MenuItem>

            <MenuItem Header="_Store" x:Name="smOnlineMode" Background="Transparent" Click="smOnlineMode_Click" IsCheckable="True" />
            <MenuItem Header="_Play Mode" x:Name="smPlayMode" Background="Transparent" Click="smPlayMode_Click" IsCheckable="True" IsChecked="True"/>


            <MenuItem Header="_Play">
                <MenuItem Header="_Play" x:Name="mnuPlay" Background="Transparent"  Command="{Binding PlayCommand}"/>
                <MenuItem Header="P_ause" x:Name="mnuPause" Background="Transparent" Command="{Binding PauseCommand}"/>
                <MenuItem Header="_Stop" x:Name="mnuStop" Background="Transparent" Command="{Binding StopCommand}"/>
                <Separator/>
                <MenuItem Header="_Next" x:Name="mnuNext" Background="Transparent" Command="{Binding NextTrackCommand}"/>
                <MenuItem Header="P_revious" x:Name="mnuPrevious" Background="Transparent" Command="{Binding PreviousTrackCommand}" />
                <MenuItem Header="_Mute/UnMute" x:Name="smnuMute" Background="Transparent" Command="{Binding MuteSoundCommand}" />
                <!--Command="{Binding MuteSoundCommand}"-->

            </MenuItem>

            <MenuItem Header="_Help">

                <MenuItem Header="_Help" x:Name="smnuOnlineHelp" Background="Transparent" Click="smnuHelp_Click" />
                <Separator />
                <MenuItem Header="_Register Player" x:Name="smnuRegister" Background="Transparent" Click="smnuRegisterPlayer" />

                <MenuItem Header="_About Codero Music Player" x:Name="smnuAbout" Background="Transparent" Click="smnuAboutClick" />
            </MenuItem>
        </Menu>
    </Controls:WindowCommands>
</Controls:MetroWindow.WindowCommands>


创建
StackPanel
,将菜单放入
StackPanel
并设置属性
HorizontalAlignment=Left
或再次尝试使用边距属性

您必须为自己重新设置MetroWindow的样式。满足您需求的最简单方法是创建一个自定义资源字典,并将MetroWindow.xaml复制到其中,然后将以下行更改为
Grid.Column=“0”


但是不要忘记在
App.xaml
中加载修改过的资源,您可以这样做

  • 从标题栏中删除标题
  • 添加一个
    MetroWindow.LeftWindowCommands
    标记
  • 在LeftWindowCommands中添加windows命令标记
  • 放置堆叠面板或网格,并在标题栏中放置所需内容
  • 代码:

    
    

    在MahApps.Metro 1.6.5中,我的解决方案是将TitleTemplate依赖项属性与主窗口中的菜单栏和标题文本块绑定,如下所示:

    MainWindow.xaml:

    <Controls:MetroWindow
            x:Class="MahAppsMetroDemo.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:MahAppsMetroDemo"
            mc:Ignorable="d"
            Title="ILSpy"
            Height="450" Width="800"
            xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
            Icon="/MahAppsMetroDemo;component/Resources/ILSpy.ico"
        >
        <Controls:MetroWindow.TitleTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
    
                    <Menu
                        Grid.Column="0"
                        Margin="6,0">
                    <MenuItem Name="File" Header="File">
                        <MenuItem Name="Open" Header="Open"/>
                        <MenuItem Name="Close" Header="Close"/>
                    </MenuItem>
                    <MenuItem Name="Edit" Header="Edit">
                        <MenuItem Name="Copy" Header="Copy"/>
                        <MenuItem Name="Paste" Header="Paste"/>
                    </MenuItem>
                </Menu>
                    <TextBlock
                        Grid.Column="1"
                        Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type Controls:MetroWindow}},Path=Title}"
                        HorizontalAlignment="Left" VerticalAlignment="Center"
                        Padding="10,5,10,5"
                        Margin="6,0"
                        FontSize="16"
                        FontWeight="Bold"
                        />
                </Grid>
            </DataTemplate>
        </Controls:MetroWindow.TitleTemplate>
        <Grid>
    
        </Grid>
    </Controls:MetroWindow>
    
    
    
    MainWindow.cs

    namespace MahAppsMetroDemo
    {
        using MahApps.Metro.Controls;
    
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : MetroWindow
        {
            public MainWindow()
            {
                InitializeComponent();
            }
        }
    }
    
    名称空间MahAppsMetroDemo
    {
    使用MahApps.Metro.Controls;
    /// 
    ///MainWindow.xaml的交互逻辑
    /// 
    公共部分类主窗口:MetroWindow
    {
    公共主窗口()
    {
    初始化组件();
    }
    }
    }
    
    感谢编辑@NikolaevWindow命令包括最小化、最大化/恢复和关闭按钮。您可以将自己的控件添加到Windows上的命令将表明它们始终位于右侧side@dkozl也许你是对的!Mahapps.Metro上的Windows命令将始终位于右侧。我已经尝试了各种可能的方法。早在您回复之前,我就尝试过设置Margin=“-880,0,0,0”。但是当我最大化窗口时,Margin属性不起作用。它不起作用,正如您所说的那样。我两个都试过了@StepUp@autopilot,没关系。尝试各种方法。例如,把你的菜单做成一个表格,看看它是如何工作的。
    namespace MahAppsMetroDemo
    {
        using MahApps.Metro.Controls;
    
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : MetroWindow
        {
            public MainWindow()
            {
                InitializeComponent();
            }
        }
    }