2017-07-28 161 views
0

如何在Windows Phone应用程序中以编程方式更改按钮背景颜色。 这是我的xaml代码。如何更改c中的按钮背景颜色#

<Style TargetType="Button" x:Key="TabButtonLast"> 
     <Setter Property="Foreground" Value="Navy"/> 
     <Setter Property="Background" Value="Green" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border CornerRadius="15,15,15,15" Background="Green" > 
         <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
<Button Name="btnNext" Style="{StaticResource TabButtonLast}" Content="Next" Height="23" HorizontalAlignment="Left" Margin="131,311,0,0" VerticalAlignment="Top" Width="75" Click="btnNext_click" /> 

我试过使用“using System.Drawing”yourButtonName.BackColor = Color.Red; 但它似乎没有工作。任何帮助将不胜感激。

+0

您想在哪种情况下进行背景颜色更改? –

+0

我想知道如果我可以在c#代码中设置按钮的背景颜色,而不是在xaml中设置它。我是这个领域的新手,如果我问的是错误的问题,请原谅我。 – Rachel

+0

一般来说,你想在xaml而不是后面的c#代码中做东西,IMO。 – Stuart

回答

1

你可以改变背景颜色这样的代码:

btnNext.Background = new SolidColorBrush(Windows.UI.Colors.Red); 
+0

它提供了一个错误“名称笔刷在当前上下文中不存在” – Rachel

+0

对不起,我编辑了答案。 – user3390116

2

您需要修改自己的风格如下:

<Style TargetType="Button" x:Key="TabButtonLast"> 
     <Setter Property="Foreground" Value="Navy"/> 
     <Setter Property="Background" 
    Value="{Binding Background, RelativeSource={RelativeSource Self}}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border CornerRadius="15,15,15,15" Background="{TemplateBinding Background}"> 
         <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

1)如果你想静态背景:

<Button Background="Red" Name="btnNext" Style="{StaticResource TabButtonLast}" Content="Next" Height="23" HorizontalAlignment="Left" Margin="131,311,0,0" VerticalAlignment="Top" Width="75" Click="btnNext_click" /> 

2)从代码改变背景色:

private void ChangeButtonColor() 
{ 
btnNext.Background = "Red"; 
} 

3)使用MVVM方法例如:

“前端”:

<Window x:Class="WpfApplication3.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication3" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 

     <Style TargetType="Button" x:Key="TabButtonLast"> 
      <Setter Property="Foreground" Value="Navy"/> 
      <Setter Property="Background" 
     Value="{Binding Background, RelativeSource={RelativeSource Self}}"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Border CornerRadius="15,15,15,15" Background="{TemplateBinding Background}"> 
          <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <Button Style="{StaticResource TabButtonLast}" Content="CHANGE COLOR" Background="{Binding BtnBackColor}" 
        Margin="50" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="Button_Click" /> 
    </Grid> 

</Window> 

“后端”:

using System; 
using System.ComponentModel; 
using System.Runtime.CompilerServices; 
using System.Windows; 
using System.Windows.Media; 

namespace WpfApplication3 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window, INotifyPropertyChanged 
    { 
     public Brush BtnBackColor { get; set; } = new SolidColorBrush(Colors.Red); 
     public MainWindow() 
     { 
      InitializeComponent(); 
      this.DataContext = this; 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      Random r = new Random(); 

      //Without Binding variant 
      //btnNext.Background = new SolidColorBrush(Color.FromRgb((byte)r.Next(1, 255), 
      // (byte)r.Next(1, 255), (byte)r.Next(1, 233))); 

      //MVVM approach variant 
      BtnBackColor = new SolidColorBrush(Color.FromRgb((byte)r.Next(1, 255), 
       (byte)r.Next(1, 255), (byte)r.Next(1, 233))); 
      OnPropertyChanged("BtnBackColor"); 
     } 
     protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
     { 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

水木清华这样应该工作...

+0

我试过了你的方法,但是没有工作.. – Rachel

+0

对不起!我编辑了答案。 –

0

您可以Data Binding尝试。数据绑定是一个不错的和明智的。一开始你必须读一点,但它是值得的。 尤其适用于MVVM应用程序。

+1

请不要参考一般文件,但要更具体:尝试回答这个问题。 – kloarubeek