[英]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.