0

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

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

在此处输入图像描述


这是我尝试过的,它在某种程度上是一个解决方案:

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

2)将图像放在画布中。当我捕获我的桌面时,我碰巧打开了 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;            
    }

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

在此处输入图像描述

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

4

1 回答 1

1

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

于 2012-04-04T17:24:12.063 回答