我正在使用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>
This does not work:
<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事件时,它将前景色重新绑定到正确的值。在第二个例子中,它没有重新绑定。
任何想法?
我记得,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}" />
你应该这样尝试:
<Style x:Key="HeaderTextStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{Binding ForegroundBrush, Source={StaticResource Theme}}"/>
...
</Style>
<style TargetType="TextBlock" BasedOn="{StaticResource HeaderTextStyle}" />