首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ControlTemplate.Triggers中使用TemplateBinding

在ControlTemplate.Triggers中使用TemplateBinding
EN

Stack Overflow用户
提问于 2012-02-15 01:38:12
回答 2查看 4K关注 0票数 20

为什么下面的这段XAML会给出一个带有(无意义的)消息"Expression type is not a valid Style value“的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}" />

如果我用一个普通的绑定替换TemplateBinding,它就会开始工作:

{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text2}

既然我在ControlTemplate中,我就不能使用TemplateBinding吗?异常消息的真正含义是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-04-05 20:20:19

绑定文本:在该行中,path2的值将应用于TextBlock的TemplatedParent属性,因此它可以正常运行。

在TemplateBinding中:仔细观察一下,Max:MyControl.Bar的解析值将充当模板绑定的资源键。这里Bar的值不是一个实际值,而是一个不存在的属性键名,因此它会抛出错误“给定键不存在于字典中”。

票数 2
EN

Stack Overflow用户

发布于 2012-02-15 01:48:14

触发器在独立样式中定义时效果最好,而不是在就地内容中定义。尝试在样式资源中定义触发器,然后从模板引用样式资源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9281579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档