2014-08-27 80 views
0

它,我创建了一个边框的按钮控制之外,那么我的按钮有圆角:更改圆润的按钮的边框背景当按下

<Border Margin="0,-15,5,0" Height="50" CornerRadius="20" BorderThickness="2" BorderBrush="#2b4e9f" > 
        <Border.Background> 
         White 
        </Border.Background> 
        <Button Content="{Binding Path=StringFile.Match_Lens, Source={StaticResource LocalizedStrings }}" Style="{StaticResource ButtonStyle}" FontWeight="Bold" FontSize="24" x:Name="button1" VerticalAlignment="Center" Width="156" Click="button1_Click" Foreground="#2b4e9f" > 

</Button> 
</Border> 

所以我的按钮包含在其中有一个白色的边框背景。 我想在按下按钮时更改边框背景的颜色。

这工作与按钮的背景...我无法弄清楚如何做同样的边境管制...

<Style x:Key="ButtonStyle" TargetType="Button"> 
      <Setter Property="OverridesDefaultStyle" Value="True"/> 
      <Setter Property="Margin" Value="5"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Border Name="border" 
         Background="{TemplateBinding Background}" 

           > 
          <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsPressed" Value="True"> 
           <Setter Property="Background" TargetName="border"> 
            <Setter.Value> 
             Green 

            </Setter.Value> 
           </Setter> 

          </Trigger> 

         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

回答

4

你不改变你的ControlTemplate内外部Border但一个背景,你可以做BorderBrush相同的,所以没有必要用外Border把它包起来。只要把一切都变成你的StyleTemplate

<Style TargetType="Button" x:Key="ButtonStyle"> 
    <Setter Property="OverridesDefaultStyle" Value="True"/> 
    <Setter Property="Margin" Value="5"/> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="BorderBrush" Value="#2b4e9f"/> 
    <Setter Property="BorderThickness" Value="2"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="Button"> 
      <Border Name="border" CornerRadius="20" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
       <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="Background" TargetName="border" Value="Green"/> 
        <Setter Property="BorderBrush" TargetName="border" Value="GreenYellow"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

,然后只适用StyleButton,因为你这样做,但没有外Border

<Button 
    Content="{Binding Path=StringFile.Match_Lens, Source={StaticResource LocalizedStrings }}" 
    Style="{StaticResource ButtonStyle}" ... /> 
+0

完美!谢谢 – 2014-09-01 09:49:42

0

在这里你去,你可以利用DataTriggers在此情况

<Border Margin="0,-15,5,0" 
     Height="50" 
     CornerRadius="20" 
     BorderThickness="2" 
     BorderBrush="#2b4e9f"> 
    <Button Content="{Binding Path=StringFile.Match_Lens, Source={StaticResource LocalizedStrings }}" 
      Style="{StaticResource ButtonStyle}" 
      FontWeight="Bold" 
      FontSize="24" 
      x:Name="button1" 
      VerticalAlignment="Center" 
      Width="156" 
      Click="button1_Click" 
      Foreground="#2b4e9f"> 
    </Button> 
    <Border.Style> 
     <Style TargetType="Border"> 
      <Setter Property="Background" 
        Value="White" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsPressed,ElementName=button1}" 
          Value="true"> 
        <Setter Property="Background" 
          Value="Green" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Style> 
</Border> 

一点要注意的是,当你设置一些属性通过风格触发你不能设置相同属性的内联,所以我移动背景属性来制定者。也许你可能也想知道Dependency Property Setting Precedence List

0

试试这个,

<Border x:Name="border1" 
      Margin="0,-15,5,0" 
      Height="50" 
      CornerRadius="20" 
      BorderThickness="2" 
      BorderBrush="#2b4e9f" 
      Background="{Binding ElementName=Button1, Path=IsPressed, Converter={StaticResource ResourceKey=ColorConverter}}"> 
     <Button x:Name="Button1" 
       Content="foo" 
       FontWeight="Bold" 
       FontSize="24" 
       VerticalAlignment="Center" 
       Width="156" /> 
    </Border> 

这里是转换器,

public class ColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     bool flag = (bool)value; 
     if (flag) 
     { 
      return Brushes.Green; 
     } 
     else 
     { 
      return Brushes.Red; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
}