首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于WPF,Snoop如何强制在属性上刷新窗口?

对于WPF,Snoop如何强制在属性上刷新窗口?
EN

Stack Overflow用户
提问于 2016-03-16 13:25:33
回答 1查看 514关注 0票数 0

我有一个很奇怪的问题:

  • 在我的C#代码中,如果设置了“最顶层”属性,窗口就不会停留在顶部。
  • 但是,如果我在Snoop中切换相同的属性,则窗口将保持在顶部。

我的问题是: Snoop正在做什么来强制刷新窗口?

我试过的

我尝试了以下几点:

  • window.UpdateLayout()
  • window.InvalidateVisual()
  • 添加后台任务以持续设置此属性。
  • TopMost设置为false,然后将true设置为触发DependencyProperty刷新。
EN

回答 1

Stack Overflow用户

发布于 2016-03-16 13:27:10

原来斯诺普并没有做什么特别的事。

如果我再等500毫秒,它就能工作:

代码语言:javascript
复制
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: In an attached property, how to wait until visual tree loaded properly?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36037028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档