このようなwpfアプリケーションでビスタガラス効果を使用する方法を示すチュートリアルがたくさんあります。
ユーザーが選択したデフォルトのカラーテーマを使用したくありません。言い換えると、ビスタガラス効果をwpfアプリケーションに適用すると、ユーザーが選択したものと同じになります。
これは私が試したものであり、ある程度の解決策です。
1)デスクトップ全体の写真を取得します。後でコードでこれを行う方法を理解します
2)画像をキャンバスに配置します。デスクトップをキャプチャしたとき、たまたま見通しが開いていました。また、透明度のある使用したい色の長方形を上に配置します
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;
}
最後に、次のようなものが必要です。
このソリューションは、デスクトップ全体のイメージをどこに置くかによってうまく機能します。デスクトップが変更されるたびに、イメージソースを更新する必要があります。また、画像ソースを更新するときは、ウィンドウなしでデスクトップ画像をキャプチャする必要があります。メインウィンドウなしでデスクトップの画像を取得する方法がわかりません。たぶん、ウィンドウを非表示にしてスクリーンキャプチャを取得してから、ウィンドウを再度表示する必要があります