当前位置:  开发笔记 > 编程语言 > 正文

设置WPF依赖项属性而不触发事件

如何解决《设置WPF依赖项属性而不触发事件》经验,为你挑选了2个好方法。

我需要在我的代码中的控件(Slider.Value)上设置依赖项属性,而不会触发ValueChanged事件(因为我设置了值,而不是用户).在WPF中处理这种情况的最佳方法是什么?

为了澄清,我想要做的是将WPF滑块连接到WinForms用户控件.目前在我的应用程序中,我有一个ValueChanged事件处理程序,它通过方法调用将滑块值传递给WinForms控件.WinForms控件(实际上是本机OpenGL窗口的包装器)需要能够根据它的内部计算动态更改滑块.为此,我使用滑块的抽象(ISlider),我在我的应用程序中实例化该滑块的WPF风格,并通过WinForms用户控件上的.NET属性将句柄传递给WinForms控件.所有这一切当前都在工作,只是当内部逻辑决定滑块需要改变时,它调用ISlider :: SetPos(),然后改变WPF滑块,然后在滑块上触发ValueChanged事件,并且该事件的处理程序提取滑块的位置并将其传递给WinForms控件,该控件首先发起事件.ligaz和Alan Le的建议似乎都应该有效,但我不确定我是否会以最好的方式解决这个问题.



1> Alan Le..:

这是一个简单的解决方法/黑客.添加一个布尔值以跟踪您是否更改了设置,让我们说"IsChangedByMe".在代码中更改依赖项属性时,将bool设置为true.在ValueChanged事件中,如果IsChangedByMe为true,则不要执行任何操作.



2> Scott Bussin..:

你确定你真的想这么做吗?如果有一个UI数据绑定到该属性并允许更改值而不触发ValueChanged事件,则很快就会终止UI不再与数据同步.

对于滑块,假设用户将其置于75%.现在,您的代码在后台将其更改为10%,但会禁止更改通知.它仍然在屏幕上看起来像75%(因为它没有被告知它改变了),但它被运行的代码用作10%.听起来像混淆的秘诀.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有