2011-01-14 14 views
1

Ich habe kürzlich angefangen, Silverlight zu lernen und kann nicht herausfinden, wie das funktioniert.Wie Sie denselben Stil auf eine Gruppe von Steuerelementen basierend auf Bindungswert in DataTemplate anwenden?

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

Was ich tun möchte, ist gesetzt FontWeigth Eigenschaft für jeden Textblock innerhalb Stackpanel basierend auf Artikel Bindungswert. Anstatt es auf jedem TextBlock zu duplizieren.

+0

Wenn Sie wirklich nur zwei Textfelder haben, würde ich ernsthaft in Betracht ziehen, nur die Bindung zu duplizieren. Die Lösung von @ColineE scheint jedoch auch ziemlich einfach zu sein. – AnthonyWJones

Antwort

1

Sie können keine verbindlichen Ausdrücke als Style-Setter-Werte verwenden. Sie können nur an Abhängigkeitseigenschaften für Abhängigkeitsobjekte binden.

Die verschiedenen Schrifteigenschaften von TextBlock werden vom übergeordneten Baum der visuellen Struktur übernommen. Sie können dies in Aktion sehen, indem Sie einer Benutzersteuerung eine Reihe von TextBlock-Elementen hinzufügen und dann die FontWeight- oder FontSize-Eigenschaft für die Benutzersteuerung festlegen.

Eine Lösung besteht also darin, den FontWeight auf ein übergeordnetes Element zu setzen und Vererbung zu verwenden. Leider können Sie FontWeight nicht auf Ihrem StackPanel einstellen. Ich würde ein ContehtControl wie folgt einfügen:

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

Dies sollte funktionieren!

+0

+1 Eine einigermaßen pragmatische Lösung. – AnthonyWJones

+0

In der Tat, das macht den Job. Was für eine Verstimmung, die Sie nicht verbindlich verwenden können. –