簡體   English   中英

如何基於DataTemplate內部的綁定值將相同樣式應用於一組控件?

[英]How to apply same style to a group of controls based on binding value inside DataTemplate?

我最近開始學習Silverlight,不知道如何使它起作用。

<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上復制它。

您不能將綁定表達式用作樣式設置器值。 您只能在依賴對象上綁定到依賴屬性。

TextBlock的各種字體屬性是從其父樹可視化樹繼承的。 通過將多個TextBlock元素添加到Usercontrol,然后在Usercontrol上設置FontWeight或FontSize屬性,可以看到實際的效果。

因此,一種解決方案是在某些父元素上設置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>

這應該工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM