1

最近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で複製する代わりに。

4

1 に答える 1

1

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

TextBlockのさまざまなフォントプロパティは、ビジュアルツリーの親から継承されます。いくつかのTextBlock要素をUsercontrolに追加し、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>

これはうまくいくはずです!

于 2011-01-14T08:43:06.357 に答える