0

このような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;            
    }

最後に、次のようなものが必要です。

ここに画像の説明を入力してください

このソリューションは、デスクトップ全体のイメージをどこに置くかによってうまく機能します。デスクトップが変更されるたびに、イメージソースを更新する必要があります。また、画像ソースを更新するときは、ウィンドウなしでデスクトップ画像をキャプチャする必要があります。メインウィンドウなしでデスクトップの画像を取得する方法がわかりません。たぶん、ウィンドウを非表示にしてスクリーンキャプチャを取得してから、ウィンドウを再度表示する必要があります

4

1 に答える 1

1

WPFで半透明のウィンドウが必要な場合は、ウィンドウの不透明度を1未満に設定し、AllowsTransparencyをtrueに設定します。残念ながら、WindowStyleもNoneに設定する必要があります。つまり、必要に応じてウィンドウクロームを再作成する必要があります。

于 2012-04-04T17:24:12.063 に答える