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

C# 使用自定义颜色在wpf上创建vista玻璃效果,c#,wpf,themes,aero-glass,C#,Wpf,Themes,Aero Glass,有很多教程向您展示了如何在wpf应用程序中使用vista玻璃效果,如 我不想使用用户选择的默认颜色主题。换句话说,如果我将vista glass efect应用于我的wpf应用程序,则它将等于用户在以下内容中选择的任何内容: 这是我尝试过的,也是一种解决方案: 1)获取整个桌面的图片。稍后,我将了解如何使用代码执行此操作 2)将图像放置在画布中。当我捕获我的桌面时,我碰巧打开了outlook。另外,在顶部放置一个矩形,该矩形的颜色要具有一定的透明度 3)创建属性X和Y,实现INotifyP

有很多教程向您展示了如何在wpf应用程序中使用vista玻璃效果,如

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


这是我尝试过的,也是一种解决方案: 1)获取整个桌面的图片。稍后,我将了解如何使用代码执行此操作

2)将图像放置在画布中。当我捕获我的桌面时,我碰巧打开了outlook。另外,在顶部放置一个矩形,该矩形的颜色要具有一定的透明度

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

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

4)现在我们需要将图像放置在相对于桌面而不是相对于窗口的位置。因此,每当窗口移动时,我们都会创建一个事件处理程序,并固定图像的位置,如:

最后,您应该有如下内容:


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

如果您想要WPF中的半透明窗口,只需将窗口不透明度设置为<1,将AllowTransparency设置为true,不幸的是,您还必须将WindowsStyle设置为None。这意味着如果需要,您必须重新创建Windows chrome。

不要这样做,这对可用性有害。您的用户期望某种行为,并且他们选择了自己喜欢的主题。不要尝试创建自己的窗口样式,始终使用用户期望的样式。我不太明白您在这里尝试做什么…我只是尝试使用vista在我的窗口上使用的Aero glass效果,使用我自己的颜色,而不是用户在windows中选择的颜色。这就是为什么我的窗口有黑色边框的原因,因为我有一个黑色的主题……在这个问题中:有人试图覆盖颜色。在这个问题上,我想实现它…是的,但是vista中的Aero主题模糊了背景中的内容。使窗口透明并放置不透明度为0.5的背景不会模糊背景。
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));
        }
    }
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;            
    }