我想在后面的代码中调用一个Setter(WPF特定).
void Invoke(Setter setter)
{
//I am interested what to do here, ?
}
Run Code Online (Sandbox Code Playgroud)
二传手就像是
<Setter TargetName="SomeUiElement" Property="SomeProperty" Value="{Binding SomeValue}" />
//resolution similar to
void Call(Setter setter)
{
setter.Property.SetValue(setter.TargetObject, setter.Value.GetValue())
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.请具体说明.
塞特斯不是他们看起来的样子.当WPF激活它们时,它们不会严格设置属性的值(尽管名称).相反,它们会贡献一个可能的价值,这可能会或可能不会对房产的有效价值产生影响.(这取决于更高优先级的属性值源当前是否处于活动状态.http://msdn.microsoft.com/en-us/library/ms743230.aspx文档可以提供11个不同的属性值.)当setter取消激活时,他们不再提供这种价值.
我提到这个的原因是为了解释为什么setter永远不会被"调用".调用是即时的 - 这是在特定时刻发生的事情.另一方面,Setter在一段时间内处于活动状态.(所以有两个有趣的时刻:它们变得活跃的时刻,以及它们不再活跃的时刻.)
因此,如果您正在询问如何调用setter,那么您可能没有合适的工具来完成您正在尝试的任何工作.最接近的可能是setter变为活动状态,并且无论你想要多长时间都保持活动状态.
此外,激活setter并不能保证其目标属性实际上会发生变化,因为可能存在其他更高优先级的值源.此外,为了清楚甚至激活应该是什么意思,你需要知道使用setter的方式 - 默认样式中的setter比应用程序定义的样式具有更低的预定义,而后者又是优先级低于模板中触发器激活的setter ...
因此,隔离的setter是没有意义的,因为它的行为(即它变为活动时的行为)是由setter出现的上下文定义的.
现在从您的代码中,看起来您真正想要做的是安排将setter的目标的Local Value设置为属性将获得的任何值,如果a)setter变为活动状态并且b)setter是最高优先级该属性可用的值.但这并不是制定者真正知道如何做的事情.
是的,这很具有讽刺意味,但是制定者实际上并不知道如何设置属性.
导致setter的值成为目标属性值的代码实际上分布在WPF的各个部分(包括Trigger和Style类,以及其他部分).没有一种简单的方法可以让WPF做你想做的事情,因为它没有办法独立完成 - WPF自己的setter处理与属性系统的许多其他方面混合在一起.我强烈建议尝试寻找其他方法来解决您希望以这种方式解决的任何问题.
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |