【问题标题】:WPF Custom Chrome Window?WPF 自定义 Chrome 窗口?
【发布时间】:2013-03-09 22:22:01
【问题描述】:

我一直在尝试做一些类似的事情...

我看了又看,只找到了这个article。 我无法将其集成到我的应用程序中。我今天刚开始使用WPF,所以我正在学习。我已经下载了window.Shell DLL。我还需要什么?谢谢!

【问题讨论】:

  • 你在链接的文章中没有得到什么?
  • 我需要什么 DLL?我都有吗?我只有 Shell DLL。我该怎么做?我所看到的只是一些 Xaml,令人困惑。
  • 对不起,如果我没有全部了解...哈哈,这对我来说很新。
  • 好吧,@Mic,我知道你的意思。我已经弄清楚了常规窗口的事情。我已经开始定制我自己的窗口。效果非常好,有阴影和边框。但是当我正在寻找调整大小和那些自定义关闭按钮时,我看到了这一点并想将它实现到我的应用程序中。
  • 感谢@Mic 我也看过这篇文章……它也对我没有帮助。 wpfwindow.codeplex.com

标签: c# wpf window visual-c#-express-2010


【解决方案1】:

如果您正在寻找有关如何将其添加到您的应用程序的分步指南,我可以尝试一下;我只是碰巧需要对一个小应用程序进行一些改进,我喜欢这个并试了一下——我花了大约 45 分钟来申请。实际上很酷的东西!

首先:下载 source 应用程序并将其解压缩到您的计算机。

您会在其中找到三个子文件夹。一个带有示例应用程序,一个名为 Microsoft.Windows.Shell,一个名为 CustomChromeLibrary。将后两者复制到您的项目地图的根文件夹,添加它们到您的项目地图(添加现有项目),并从您的启动项目中,参考 他们。

现在打开您要应用 CustomChromeLibrary 的窗口。您需要从

更改根目录
<Window> 

<ccl:CustomChromeWindow>

,这是通过使用以下代码作为文档根来完成的:

<ccl:CustomChromeWindow 
Title="YourWindowTitle" Height="268" Width="733" ResizeMode="CanResize" 
x:Class="YourNamespace.YourWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell"
xmlns:ccl="clr-namespace:CustomChromeLibrary;assembly=CustomChromeLibrary"
xmlns:local="clr-namespace:YourNamespace" 
>

注意示例中的最后三行。这些需要更新以引用正确的库;最后一个实际上引用了您的命名空间。

接下来您需要更新窗口的源代码,因为这仍然是一个简单的窗口,您会收到错误消息。

改变这个

public partial class YourWindow : Window

到这里

public partial class YourWindow : CustomChromeLibrary.CustomChromeWindow

你已经成功了一半!

接下来您只需要为您的窗口创建对象(标题栏等)。这在 示例项目 5 中完成得非常好;我确实只是复制它。

拿走一切

<shell:WindowChrome.WindowChrome>
    <shell:WindowChrome
    ...

到这里

    <!--min/max/close buttons-->
    <ccl:CaptionButtons/>

现在你可以像这样填充你的窗口

    <Grid> 
        The content of your Window goes here 
    </Grid>

然后像这样关闭 xaml

    </Grid>
</ccl:CustomChromeWindow>

现在,如果您尝试运行它,您将收到另一个错误。仍然缺少三个文件:

您需要的第一个是 Microsoft 文件:CaptionButtonRectToMarginConverter.cs;您还将在示例中找到它。将其复制到您的项目并添加它(添加现有文件)。

您需要对其进行一项更改:

namespace YourNamespace
{ ...

而不是示例的命名空间。

最后,您需要创建按钮的两个 xaml 文件:GlassButton.xaml 和 GlassIcon.xaml;它们可以在“资源”子文件夹中找到(并且在 xaml 中被称为资源字典)。将整个子文件夹复制到您的项目中,并将这两个文件添加到您的项目中(添加现有文件)。

现在您应该终于可以运行您的项目了。

我们不要忘记这一点:gbahns,原文章的​​作者gbahns,在 codeplex.com!

【讨论】:

  • 非常彻底,我希望我能给你100分。谢谢。
【解决方案2】:

您可以找到很多自定义 chrome 的实现。

我见过你链接的另一个帮助库是

MahApps.Metro

阅读第 3 部分。它可以使用 Nuget 进行设置,从而更容易为新人集成。

另外,第 3.3 3.4 3.5 节讨论了自定义和扩展 MetroWindow 控件,它为您提供自定义 chrome 并允许向 chrome 标题栏添加控件

【讨论】:

  • 谢谢。我唯一真正需要的是恢复原始窗口功能,按钮样式与图像中的一样。
  • 如果您的意思是(关闭、恢复/最大化和最小化)原始窗口功能,您也可以通过 Metro 应用程序库获得它。只需选择您想要的部分并使用它们。阅读文档。代码项目玻璃主题文章也是我尝试过的。但是在 Windows 8 和窗口最大化倾斜镀铬尺寸方面存在一些问题
  • 地铁的事情看起来更复杂。我以为我要做的就是添加一些 dll 并更改 Xaml。
【解决方案3】:

在这个堆栈溢出问题中:

How can I add a button to the WPF caption bar while using custom window chrome?

我在询问如何在我的自定义窗口 Chrome 窗口的标题栏中插入按钮。 xaml 示例可能足以帮助您入门。

除此之外,我不确定您在寻找什么。

编辑:我在其他帖子中的按钮样式是一个相当简单的按钮,但您应该能够将其替换为您想要的任何样式。

【讨论】: