2010-04-30 94 views
10

为什么我无法创建触发器并将其用作XAML中的静态资源?XAML触发器为StaticResource

<Window.Resources> 
    <Trigger x:Key="ValidationTrigger" x:Shared="False" Property="Validation.HasError" Value="true"> 
     <Setter Property="FrameworkElement.ToolTip" 
       Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
       Path=(Validation.Errors)/ErrorContent}"/> 
    </Trigger> 

    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
     <Style.Triggers> 
      <StaticResource ResourceKey="ValidationTrigger"/> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

我会在运行时errormessage的
“值不能为空
参数名:在对象System.Windows.Markup.StaticResourceHolder“的标记文件triggerBase错误”

+0

好问题:)我想知道这个答案。 – JeroenEijkhof 2010-09-02 19:34:27

+0

由于错误状态:资源字典的initliazation尝试将null作为参数值传递。由于触发器有一个无参数的构造函数,我认为这个错误源于你正在尝试使用的绑定。 RelativeSource.Self如何解决这个特定的用例? – 2015-09-14 12:24:52

回答

0

我想象这是因为资源首先被加载。

因此,在这种情况下,WPF会尝试加载您的触发器,然后再对其进行任何控制。然后当时不能评估触发值。

但需要确认:)