2012-02-14 54 views
18

爲什麼下面一段XAML給我帶有(無意義)消息的「XamlParseException」「表達式類型不是有效的樣式值」。在運行時?在ControlTemplate.Triggers中使用TemplateBinding

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

出錯行是

​​

如果我更換一個正常的TemplateBinding綁定它開始工作:

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

我不應該能夠使用TemplateBinding,因爲我在ControlTemplate內?那異常消息究竟意味着什麼?

+0

我只是認爲我會芯片中,我有一個類似的問題,完全忘了能夠使用常規綁定,謝謝你的工作。 – Hugoagogo 2013-12-04 21:28:58

回答

0

觸發器在獨立樣式而不是就地內容中定義時效果最好。嘗試在樣式資源中定義觸發器,然後從模板中引用樣式資源。

+0

對不起,不回答我的問題。我知道如何解決這個問題,但想知道它爲什麼會發生。 – stmax 2012-02-25 21:57:03

2

Binding TemplatedParent:在這一行中,path2的值將應用於TextBlock的Text屬性,因此它運行良好。

在TemplateBinding中:仔細看看這個,Max:MyControl.Bar的解析值將作爲模板綁定的資源鍵 [這裏Bar的值不是實際值,而是它是一個屬性鍵名],它不存在,所以它會拋出錯誤「給定的鍵不在字典中。」

相關問題