簡體   English   中英

使用WPF,Snoop如何在屬性更改時強制刷新窗口?

[英]With WPF, how does Snoop force a window refresh on a property change?

我有一個很奇怪的問題:

  • 在我的C#代碼中,如果我設置“ Topmost”屬性,則窗口不會停留在頂部。
  • 但是,如果在Snoop中切換此相同屬性,則窗口將停留在頂部。

我的問題是這樣的:Snoop在做什么以強制刷新窗口?

在此處輸入圖片說明

我嘗試過的

我嘗試了以下方法:

  • window.UpdateLayout() ;
  • window.InvalidateVisual() ;
  • 添加后台任務以連續設置此屬性。
  • TopMost設置為false ,然后設置為true ,以觸發DependencyProperty刷新。

事實證明,史努比沒有做任何特別的事情。

如果我再等待500毫秒,則可以:

Task task = Task.Run(
    async () =>
    {
        // Without this delay, the change will not work.
        await Task.Delay(TimeSpan.FromMilliseconds(500));

        Application.Current.Dispatcher.Invoke(
            () =>
            {
                floatingPaneWindow.Topmost = true;
                {
                    if (window.Top < 0)
                    {
                        window.Top = 0;
                    }
                        if (window.Left < 0)
                    {
                        window.Left = 0;
                    }
                }                                               
            });
    });

當然,在應用程序中添加特定的時間是很棘手的,所以我目前正在尋找確定窗口是否正確設置的方法。

更新資料

拼圖解決后,使用Dispatcher選擇適當的優先級,請參閱WPF:在附加屬性中,如何等待直到視覺樹正確加載?

暫無
暫無

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

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