2012-02-14 4 views
18

XAMLの次の部分が、「式の型が有効なスタイル値ではありません」という(意味のない)メッセージのXamlParseExceptionを返すのはなぜですか?実行時に?ControlTemplate.TriggersでTemplateBindingを使用する

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

を私は以来、TemplateBindingのを使用することはできないはずです。私はそれが動作を開始バインディング法線と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> 

問題のある行は

​​

です私はControlTemplate内にいますか?例外メッセージは実際にはどういう意味ですか?

+0

私はちょうど私が同じような問題を抱えているということでチップすると思っていました。通常のバインディングを使用できることを完全に忘れていました。 – Hugoagogo

答えて

0

トリガーは、スタンドアロンスタイルで定義した場合、インプレースコンテンツでは最適に機能しません。スタイルリソースでトリガーを定義してから、テンプレートからスタイルリソースを参照してください。

+0

申し訳ありませんが、私の質問には答えません。私は問題を回避する方法を知っていますが、なぜそれが起こるか知りたいです。 – stmax

2

バインディングTemplatedParent:この行では、path2の値がTextBlockのTextプロパティに適用されるため、正常に動作します。

In TemplateBinding:これをよく見てください。Max:MyControl.Barの解決された値は、テンプレートバインディングのリソースキーとして機能します。 [ここで、Barの値は実際の値ではありませんそれは存在しないので、 "指定されたキーは辞書に存在しませんでした"というエラーをスローします。