2011-09-09 6 views
1

私は、テキストブロックのテキストをバインドする値にバインドしようとしています。 ツールチップのスタイル付きテキストブロックバインディングが代わりにコントロールテンプレートにバインドしています

このスタイルを適用するテキストブロックに対して次の作品

Working Tooltip

しかし、いくつかの奇妙な理由で

<Style x:Key="GridCell" TargetType="{x:Type TextBlock}"> 
    <Setter Property="ToolTip" Value="{Binding Converter={StaticResource CellToolTipConverter}}"/> 
</Style> 

<DataTemplate x:Key="GridCellContentTemplate"> 
    <TextBlock Style="{StaticResource GridCell}" 
       Text="{Binding Converter=..."/> 
</DataTemplate> 

<xcdg:Column FieldName="FXRate" CellContentTemplate="{GridCellContentTemplate}" /> 
、私はデータグリッドスタット細胞へのリソースとしてでこのスタイルを渡ししようとすると、

<Style x:Key="{x:Type xcdg:StatCell}" TargetType="{x:Type xcdg:StatCell}"> 
    <Style.Resources> 
     <Style x:Key="{x:Type TextBlock}" TargetType="{x:Type TextBlock}"> 
      <Setter Property="ToolTip" Value="{Binding Converter={StaticResource CellToolTipConverter}}"/> 
     </Style> 
    </Style.Resources> 
</Style> 

<xcdg:StatCell FieldName="Limit"> 
     <TextBlock Text="{Binding Source={StaticResource Layers}, Path=StatLimit, Converter=..." /> 
</xcdg:StatCell> 

Broken Tooltip

ご覧のとおり、ツールチップは、テキストボックステキストがバインドされているものではなく、一部のDataTemplateにバインドされています。私が知ることから、この2つには違いはありません。実際、後者はより単純なようです。

2番目のツールチップバインディングが最初の方法で動作しない理由を理解できますか?


私はとの結合を変更した場合ので、結合は、細胞内のテキストボックスにかかわらず、その道を作っていることを確認することができます:

<Style x:Key="{x:Type xcdg:StatCell}" TargetType="{x:Type xcdg:StatCell}"> 
    <Style.Resources> 
     <Style x:Key="{x:Type TextBlock}" TargetType="{x:Type TextBlock}"> 
      <Setter Property="ToolTip" Value="{Binding Path=Text, RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource CellToolTipConverter}}"/> 
     </Style> 
    </Style.Resources> 
</Style> 

私はこれを取得

Attempt

もちろん、私はtextblockテキストプロパティを望ましくありません。私は生の値をtextblockがboun dから。

+0

テキストボックスに機能するスタイルを単純に適用するのはなぜですか?別名 '' – Tejs

+0

@Tejs - 同じ効果です。 {}のように見えるようにstatcellを変更すると、 "System.Windows.DataTemplate"というツールチップが表示されます – Alain

+0

私はこれに気付きました。キー名は参考になるはずですか?私は「x:Key」は単純な文字列でなければならないと思った(例: 'x:Key =" {x:Type TextBlock} ""それは私には奇妙に見える。 ) – Tejs

答えて

0

この理由は、テキストバインディングがツールチップがアタッチされたオブジェクトのデータコンテキストを調べているためです。 xcdg:StatCellが独自の目的でdatacontextをハイジャックし、子ビジュアル要素がバインドされている元のプロパティにアクセスすることはありません。

関連する問題