Silverlight:为什么这种风格在一个地方工作而不是另一个地方呢?

时间:2010-12-10 22:49:13

标签: silverlight xaml

我的Application.Resources中有一种风格:

    <Style x:Name="TransparentBackground" TargetType="Border">
        <Setter Property="Background" Value="AntiqueWhite" />
        <Setter Property="Opacity" Value=".6" />
        <Setter Property="Padding" Value="5" />
    </Style>

我已将它应用于两个地方。在第一个,它的工作原理:

<UserControl.Resources>
    <DataTemplate x:Key="FileTemplate">
            <Border Style="{StaticResource TransparentBackground}">
                <TextBlock TextWrapping="Wrap">
                    <Run Text="{Binding Name, FallbackValue='File Name'}" FontWeight="Bold" />
                    <Run Text="." Foreground="#787878" FontWeight="Light" />
                    <Run Text="{Binding TypeExtension, FallbackValue='type'}" Foreground="#787878" FontWeight="Light" />
                </TextBlock>
            </Border>
    </DataTemplate>
</UserControl.Resources>

当我DataTemplate呈现时,它看起来很棒。但是,当我在LayoutRoot中使用该样式时,它会失败:

        <Border Style="{StaticResource TransparentBackground}">
            <TextBlock x:Name="searchResultsFoundCountText" />
        </Border>

背景颜色为灰色而不是AntiqueWhite,不透明度为1而不是.6。但是,填充似乎正在起作用。为什么会发生这种情况?

我正在使用Silverlight 4。

1 个答案:

答案 0 :(得分:0)

您可以使用样式设定器设置属性。这种方式有一个小优先级(第8位)。

  1. 由物业系统强制设定。
  2. 通过有效动画或动画设置。
  3. 通过代码,通过XAML中的直接设置或通过数据绑定在本地设置。
  4. 由TemplatedParent设置。
  5. 隐式样式 - 这仅适用于Style属性。
  6. 按样式触发器设置。
  7. 由模板触发器设置。
  8. 由样式设置器设置。
  9. 由默认样式设置。
  10. 通过继承设置。
  11. 按元数据设置
  12. 但是你有一个没有触发器的silverlight,你的代码不包含模板,所以可能的答案可能是代​​码设置器(第3个)或动画(第2个)。

    此外,您的样式在root用户控件MainPage.xaml中运行良好。

    以下是关于财产优先权的msdn article