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

时间:2012-04-04 04:10:05

标签: c# wpf themes aero-glass

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

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

enter image description here


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

  

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

执行此操作      

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

enter image description here

  

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;            
    }

最后你应该有:

enter image description here

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

1 个答案:

答案 0 :(得分:1)

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