XAML触发器作为静态资源

11

为什么我不能创建一个触发器并将其用作XAML中的静态资源?

<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>

我在运行时收到以下错误信息:
“值不能为 null。
参数名称:triggerBase 错误出现在标记文件中的对象 'System.Windows.Markup.StaticResourceHolder'”


好问题 :) 我想知道这个的答案。 - JeroenEijkhof
正如错误所述:资源字典的初始化尝试将null作为参数值传递。由于触发器具有无参构造函数,我认为错误源于您尝试使用的绑定。在这种特定用例中,RelativeSource.Self如何解析? - Jonas Van der Aa
1个回答

1

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

所以在这种情况下,WPF 会尝试在任何可能与之相关联的控件之前加载您的触发器。然后,在那个时候无法评估触发器的值。

但需要确认一下 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接