Textblock未检索属性上的新样式已更改

时间:2013-04-05 14:17:38

标签: silverlight mvvm styles themes

我正在使用Silverlight 5并尝试对视图模型进行一些样式绑定。我遇到了绑定问题而没有在属性更改时设置新值。但这只发生在默认样式中,如果我使用键,那么它可以正常工作。以下是一些例子。

这有效:

<Style x:Key="HeaderTextStyle" TargetType="TextBlock">
    <Setter Property="Foreground" Value="{Binding ForegroundBrush, Source={StaticResource Theme}}"/>
    <Setter Property="FontSize" Value="15"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="TextWrapping" Value="Wrap"/>
    <Setter Property="Margin" Value="0,15,0,4"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
</Style>

这不起作用:

<Style TargetType="TextBlock">
    <Setter Property="Foreground" Value="{Binding ForegroundBrush, Source={StaticResource Theme}}"/>
    <Setter Property="FontSize" Value="15"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="TextWrapping" Value="Wrap"/>
    <Setter Property="Margin" Value="0,15,0,4"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
</Style>

在调用PropertyChanged事件的第一个示例中,它将前景色重新绑定为正确的值。在第二个例子中,它没有重新绑定。

任何想法?

2 个答案:

答案 0 :(得分:0)

我记得,Style总是使用x:Key属性声明,如果要将某些样式设置为TargetType的默认样式,请使用BasedOn属性。像...

<Style x:Key="HeaderTextStyle" TargetType="TextBlock">
    <Setter Property="Foreground" Value="{Binding ForegroundBrush, Source={StaticResource Theme}}"/>
    ...
</Style>

<style TargetType="TextBlock" BasedOn="{StaticResource HeaderTextStyle}" />

答案 1 :(得分:0)

您应该尝试这种方式:

 <Style x:Key="HeaderTextStyle" TargetType="TextBlock">
        <Setter Property="Foreground" Value="{Binding ForegroundBrush, Source={StaticResource Theme}}"/>
        ...
    </Style>

    <style TargetType="TextBlock" BasedOn="{StaticResource HeaderTextStyle}" />