为什么下面的XAML片段给我一个XamlParseException并带有(无意义的)消息“表达式类型不是有效的样式值”。在运行时?

<Control x:Class="TestApp.Max.MyControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:Max="clr-namespace:TestApp.Max"
         mc:Ignorable="d"
         d:DesignHeight="300" d:DesignWidth="300">
  <Control.Template>
    <ControlTemplate>
      <TextBlock Name="txt" Text="{TemplateBinding Max:MyControl.Foo}" />
      <ControlTemplate.Triggers>
        <Trigger Property="Control.IsMouseOver" Value="True">
          <Setter TargetName="txt" Property="Text" Value="{TemplateBinding Max:MyControl.Bar}" />
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
  </Control.Template>
</Control>

冒犯的行是
<Setter TargetName="txt" Property="Text" Value="{TemplateBinding Max:MyControl.Bar}" />

如果我用常规绑定(bind)替换TemplateBinding,它将开始工作:
{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text2}

因为我在ControlTemplate中,是否应该不能使用TemplateBinding?异常消息的真正含义是什么?

最佳答案

绑定(bind)TemplatedParent:在这一行中,path2的值将应用于TextBlock的Text属性,因此它运行良好。

在TemplateBinding中:仔细看一下,Max:MyControl.Bar的解析值将用作Template绑定(bind)的资源键
[此处Bar的值不是实际值,而是一个属性键名称],该名称不存在,因此引发错误“字典中不存在给定的键”。

关于.net - 在ControlTemplate.Triggers中使用TemplateBinding,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9281579/

10-09 19:28