首页 > 解决方案 > 如何在 WPF 中创建一个看起来像“UWP”应用程序的顶级窗口?

问题描述

我需要创建一个类似于以下内容的 WPF 自定义窗口: 此窗口

有什么办法可以做到吗?

我尝试使用 MahApps.Metro Window 但调整大小时窗口非常闪烁。这是示例代码:

 <Controls:MetroWindow x:Class="MahAppsMetroSample.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                      xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
                      Title="MahApps.Metro.Sample"
                      GlowBrush="{DynamicResource AccentColorBrush}"
                      WindowStartupLocation="CenterScreen">

  <Controls:MetroWindow.RightWindowCommands>
    <Controls:WindowCommands>
      <Button Content="settings" />
      <Button>
        <StackPanel Orientation="Horizontal">
          <iconPacks:PackIconModern Width="24" Height="24" Kind="FoodCupcake" />
            <TextBlock Margin="4 0 0 0" VerticalAlignment="Center" Text="deploy cupcakes" />
        </StackPanel>
      </Button>
    </Controls:WindowCommands>
  </Controls:MetroWindow.RightWindowCommands>

  <Grid>
  </Grid>

</Controls:MetroWindow>

标签: c#wpfuwpwindows-10

解决方案


是的,您可以使用称为 UWP 主机的包来实现它。

UWP 主机 - Github

UWP 主机 - Nuget



第 1 步:

您需要做的就是通过 nuget 将 UWP Host 导入您的项目。

第 2 步:

将此代码添加到您的 App.xaml 文件

<Application.Resources>
  <ResourceDictionary>
       <ResourceDictionary.MergedDictionaries>
           <ResourceDictionary Source="pack://application:,,,/UWPHost;component/Themes/Generic.xaml" />
       </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>


第 3 步:

将此命名空间添加到您要更改的窗口中

xmlns:uwp="clr-namespace:UWPHost;assembly=UWPHost"


第 4 步:

将 uwp 前缀添加到窗口标签并确保它看起来与此类似

<upw:Window x:Class="WpfApp1.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"
        xmlns:uwp="clr-namespace:UWPHost;assembly=UWPHost"
        mc:Ignorable="d"
        ShowTitlebar="true" Theme="Light"
        Title="MainWindow" Height="300" Width="300">

</uwp:Window>



步骤 5

继承 UWPHost.Window 类,
例如:

public partial class MainWindow : UWPHost.Window{
   public MainWindow()
   {
       InitializeComponent();
   }
}

就是这样


推荐阅读