有很多教程向您展示如何在像这样的 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;
}
最后你应该有类似的东西:
如果我在哪里有整个桌面的图像,这个解决方案会很好用。每次桌面更改时,我都必须更新图像源。此外,在更新图像源时,我必须在没有窗口的情况下捕获桌面图像。我不知道如何在没有主窗口的情况下获取桌面图像。也许我将不得不隐藏我的窗口获取屏幕截图,然后再次显示我的窗口