使用自定义颜色在wpf上创建vista玻璃效果

有很多教程向您展示如何在像这样的 wpf应用程序中使用vista glass效果。

我不想使用用户选择的默认颜色主题。 换句话说,如果我将vista glass efect应用于我的wpf应用程序,它将等于用户选择的任何内容:

在此处输入图像描述


这是我尝试过的,它有点解决方案:

1)获取整个桌面的图片。 我稍后会弄清楚如何使用代码执行此操作

2)将图像放在canvas上。 当我抓住我的桌面时,我碰巧打开了Outlook。 还要在顶部放置一个矩形,并使用您想要使用的颜色和一些透明度

在此处输入图像描述

3)创建属性X和Y,实现INotifyPropertyChanged接口,以便我们可以在代码后面更新图像的位置:

public partial class MainWindow : Window, INotifyPropertyChanged { double _X; public double X { get { return _X; } set { _X = value; NotifyPropertyChanged("X"); } } double _Y; public double Y { get { return _Y; } set { _Y = value; NotifyPropertyChanged("Y"); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } 

别忘了设置: this.DataContext = this; 为了在窗口加载完成时成功绑定属性

4)现在我们需要将图像放置在相对于桌面的位置而不是窗口。 所以我们在窗口移动时创建一个事件处理程序,我们修复图像的位置,如:

 void MainWindow_Loaded(object sender, RoutedEventArgs e) { this.DataContext = this; this.LocationChanged += new EventHandler(MainWindow_LocationChanged); } void MainWindow_LocationChanged(object sender, EventArgs e) { X = -((System.Windows.Window)(sender)).RestoreBounds.TopLeft.X; Y = -((System.Windows.Window)(sender)).RestoreBounds.TopLeft.Y; } 

最后你应该有类似的东西:

在此处输入图像描述

如果我在哪里有整个桌面的图像,这个解决方案将很有用。 每次桌面更改时,我都必须更新图像源。 此外,在更新图像源时,我将不得不在没有窗口的情况下捕获桌面图像。 我不知道如何在没有主窗口的情况下获取桌面图像。 也许我将隐藏我的窗口获取屏幕捕获然后再次显示我的窗口

如果你想在WPF中使用半透明窗口,只需将窗口Opacity设置为<1,将AllowTransparency设置为true,不幸的是,你必须将WindowStyle设置为None。 这意味着如果需要,您必须重新创建窗口镶边。