2011-01-14 2 views
1

私は最近Silverlightの学習を始めましたが、これをどうやって作っているのか理解できません。DataTemplate内のバインド値に基づいてコントロールのグループに同じスタイルを適用する方法はありますか

<ComboBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <StackPanel.Resources> 
       <Style TargetType="TextBlock"> 
        <Setter Property="FontWeight" Value="{Binding Path=FontWeight}"/> 
       </Style> 
      </StackPanel.Resources> 
      <TextBlock Text="{Binding Path=Name}" Margin="0,0,5,0"/> 
      <TextBlock Text="{Binding Path=Prefix}"/> 
     </StackPanel> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

私がしたいことは、アイテムバインディング値に基づいてStackPanel内の各TextBlockのFontWeigthプロパティを設定することです。すべてのTextBlockに複製する代わりに。

+0

本当に2つのテキストボックスしかないのであれば、私は真剣にバインディングを複製することを検討します。しかし、@ColinEの解決策もかなり単純です。 – AnthonyWJones

答えて

1

バインディング式をスタイル設定値として使用することはできません。依存関係オブジェクトの依存関係プロパティにのみバインドできます。

TextBlockのさまざまなフォントプロパティは、その親イオンからビジュアルツリーに継承されます。これは、UserControlにTextBlock要素の数を追加し、UserControlのFontWeightまたはFontSizeプロパティを設定することで、実際に表示されます。

したがって、1つの解決策は、親要素の一部にFontWeightを設定し、継承に依存する方法です。残念ながら、StackPanelでFontWeightを設定することはできません。私は次のようにContehtControlを挿入します:

<ComboBox.ItemTemplate> 
    <DataTemplate> 
     <ContentControl FontWeight="{Binding Path=FontWeight}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Path=Name}" Margin="0,0,5,0"/> 
       <TextBlock Text="{Binding Path=Prefix}"/> 
      </StackPanel> 
     </ContentControl> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

これは動作するはずです!

+0

+1合理的に現実的な解決策。 – AnthonyWJones

+0

これは本当に仕事です。あなたはスタイルでバインディングを使うことができません。 –

関連する問題