2012-12-13 33 views
1

这里内边框背景是在我的应用程序资源的XAML,全球改变了所有的Button控件的应用程序的外观和行为像我想:更改支持算法FMP的ControlTemplate

<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="Border" CornerRadius="0" BorderThickness="0" 
          Background="CornflowerBlue" BorderBrush="CornflowerBlue"> 
        <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <!-- a bunch o' triggers here --> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

在我的应用程序的一个用户控件,我想改变这个按钮的一些属性。下面是一些XAML,我使用的UserControl.Resources部分现在要做到这一点:

<Style x:Key="SpecialButton" TargetType="Button" BasedOn="{StaticResource MyButtonStyle}"> 
    <Setter Property="Width" Value="20" /> 
    <Setter Property="Visibility" Value="Collapsed" /> 
    <Setter Property="Content" Value=">" /> 
    <Setter Property="Border" Value="#eeeeee" /> 
    <Setter Property="Border.Background" Value="#eeeeee" /> 
</Style> 

,我的风格分配给SpecialButton有正确的宽度,可见性和内容上我的用户控制按钮,但最后两次尝试不起作用。我将如何去改变这个SpecialButton风格中来自应用程序资源名称为“Border”的Border的背景颜色?

回答

2

你可以做的是使用TemplateBinding在基础样式中设置控件的背景属性。同样在基础样式中,将背景颜色设置为默认的“CornflowerBlue”。

<Setter Property="Background" Value="CornflowerBlue" /> 
<Setter Property="Template"> 
    <Setter.Value>  
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Border x:Name="Border" Background="{TemplateBinding Background}" 

现在,您可以覆盖在派生的风格背景:

<Style x:Key="SpecialButton" TargetType="Button" BasedOn="{StaticResource MyButtonStyle}"> 
    <Setter Property="Background" Value="#eeeeee" /> 

(需要注意的是,如果你想使用不上的按钮控件定义其他属性 - 或者说,如果你想使用多种背景颜色 - 那么你必须创建自己的控件,继承Button,并将新属性公开为依赖属性。)

+1

感谢您的回答,它不完全正确,但它导致我走向正确的道路。我原来的问题在第一个XAML代码片段中的Style元素上有一个'x:Key',这不在我的应用程序的XAML中。因此,我不得不在我的第二个XAML代码片段中使用'BasedOn =“{StaticResource {x:Type Button}}”'来让它尊重对原始样式的更改。 –

相关问题