[英]WPF - Trigger not firing
尝试执行应尽可能简单的操作时遇到问题。 我已经尝试使用Trigger
根据DependencyProperty
或DataTrigger
-我不能得到任何工作。
触发器的XAML是:
<Style x:Key="FileWatchButton" BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="Main:Main.XmlFilesAvailableForLoading" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
并且相关的代码背后是:
public static readonly DependencyProperty XmlFilesAvailableForLoadingProperty =
DependencyProperty.Register("XmlFilesAvailableForLoading", typeof(bool), typeof(Main));
public bool XmlFilesAvailableForLoading
{
get
{
try
{
return (bool)this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.DataBind,
(System.Windows.Threading.DispatcherOperationCallback)delegate { return GetValue(XmlFilesAvailableForLoadingProperty); },
XmlFilesAvailableForLoadingProperty);
}
catch (Exception)
{
return (bool)XmlFilesAvailableForLoadingProperty.DefaultMetadata.DefaultValue;
}
}
set
{
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.DataBind,
(System.Threading.SendOrPostCallback)delegate{ SetValue(XmlFilesAvailableForLoadingProperty, value); }, value);
}
}
基本上,演示者可以正确设置dp(它基于一个或多个文件的FileSystemWatcher
类),但是不会Trigger
。 这是线程问题吗?
谢谢。
目前尚不清楚代码是否完整,但是看起来触发器中的Property路径可能是错误的。 样式化的按钮是否具有Main属性? 我猜不是; 看起来您正在尝试触发另一个名为Main的元素的属性,对吗?
无论如何,都不需要名称空间前缀。 如果按钮具有名为Main的属性,则可以直接解决此问题; 如果没有,那么前缀将无济于事。
我的猜测是,您可能需要一个DataTrigger,其绑定引用Main元素:
<local:Main Name="MyMain" ... /> <!-- this has the XmlFilesAvailableForLoading property -->
<DataTrigger Binding="{Binding XmlFilesAvailableForLoading, ElementName=MyMain}"
Value=True>
<Setter Property="Background" Value="Red" />
</DataTrigger>
无关紧要的是,您在DP getter和setter中应该有任何非样板实现。 请记住,绑定和样式系统将绕过getter和setter并直接与基础存储进行对话。 因此,我强烈建议将其改回为普通的GetValue和SetValue调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.