2011-03-03 89 views
2

在Silverlight4中有这个非常简单的xaml样式问题。明确样式覆盖的隐式xaml样式

当我通过显式样式在元素上设置样式时,我的隐式样式被删除了? 我创建了一个简单的例子来说明这个问题。

<UserControl.Resources> 
    <Style TargetType="TextBox"> 
     <Setter Property="Background" Value="red"/> 
    </Style> 

    <Style TargetType="FrameworkElement" x:Key="test"> 
     <Setter Property="Margin" Value="20"/> 
    </Style> 

</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White"> 
    <TextBox Style="{StaticResource test}" Height="40" Width="120"> </TextBox> 
</Grid> 
</UserControl> 

所以,当我删除Style="{StaticResource test} 隐式的再次应用。

注意:这是过于简单的例子。因此将边距移动到texbox样式不是一种选择,因为实际项目包含较大的xaml样式。

有人知道解决方案还是可以确认这是不可能的?

Thx提前!

回答

2

查看BasedOn样式属性。这将允许您从基础样式继承,以使用基础属性并添加一些更改。

现在,BasedOn存在一个问题 - 它不能与隐式样式一起使用。但是,这很容易解决。本文围绕演示工作,也将解释支持算法FMP属性好一点:

Silverlight how-to: Inherit from an Implicit Style

+0

嘿,THX因为我知道如何使用支持算法FMP但它不是非常有用在这种情况下,因为你可以在响应” t基于一个文本框的框架样式。在最终的代码texbox将包括一个自定义模板... – Kris 2011-03-04 09:15:00

+0

我猜你不想基于FrameworkElement风格的TextBox风格? – grimus 2011-03-04 16:52:17

+0

不,因为我想在某些情况下将样式添加到文本框。这可能不是很清楚,因为我简化了上面的例子,最后一个更复杂,需要正确的顺序。 – Kris 2011-03-04 18:59:05