簡體   English   中英

使用自定義顏色在 wpf 上創建 vista 玻璃效果

[英]Create vista glass effect on wpf with custom color

有很多教程向您展示如何在 wpf 應用程序中使用 vista 玻璃效果,例如這個

我不想使用用戶選擇的默認顏色主題。 換句話說,如果我將 vista 玻璃效果應用於我的 wpf 應用程序,它將等於用戶在以下選項中選擇的任何內容:

在此處輸入圖像描述


這是我嘗試過的,它是一種解決方案:

1)獲取整個桌面的圖片。 我稍后會弄清楚如何用代碼來做到這一點

2) 將圖像放在 canvas 中。當我捕獲我的桌面時,我碰巧打開了 outlook。 還要在頂部放置一個矩形,其顏色要使用一些透明度

在此處輸入圖像描述

3)創建屬性X和Y,實現INotifyPropertyChanged接口,以便我們可以在后面的代碼中更新圖像的position:

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; 為了在 window 完成加載時成功綁定屬性

4) 現在我們需要將帶有 position 的圖像相對於桌面放置,而不是相對於 window。因此,每當 window 移動時,我們都會創建一個事件處理程序,我們修復圖像的 position,例如:

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

最后你應該有這樣的東西:

在此處輸入圖像描述

如果我在哪里有整個桌面的圖像,這個解決方案將非常有效。 每次桌面發生變化時,我都必須更新圖像源。 此外,在更新圖像源時,我將不得不在沒有我的 window 的情況下捕獲桌面圖像。我不知道如何在沒有我的主 window 的情況下獲取桌面圖像。也許我將不得不隱藏我的 window 獲取屏幕截圖然后再次顯示我的 window

如果您想要 WPF 中的半透明 window,只需將 windows 不透明度設置為 < 1,將 AllowsTransparency 設置為 true,不幸的是,您還必須將 WindowStyle 設置為 None。 這意味着如果需要,您必須重新創建 window chrome。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM