Как применить тот же стиль к группе элементов управления на основе значения привязки внутри DataTemplate? - PullRequest
1 голос
/ 14 января 2011

Я недавно начал изучать 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>

Что я хочу сделать, это установить свойство FontWeigth для каждого TextBlock внутри StackPanel на основе значения привязки элемента. Вместо того, чтобы дублировать его на каждом TextBlock.

1 Ответ

1 голос
/ 14 января 2011

Вы не можете использовать выражения привязки в качестве значений установщика стиля.Вы можете привязать только свойства свойств к объектам зависимостей.

Различные свойства шрифта TextBlock наследуются от его родительского элемента - визуального дерева.Вы можете увидеть это в действии, добавив несколько элементов TextBlock в Usercontrol, затем установив свойство FontWeight или FontSize в Usercontrol.

Итак, одно из решений - установить FontWeight на некоторый родительский элемент и полагаться наНаследование.К сожалению, вы не можете установить FontWeight на StackPanel.Я бы вставил 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>

Это должно работать!

...