2013-11-08 4 views
0

У меня есть кнопка внутри сетки в WPF, и одним нажатием кнопки фон должен быть заменен новым изображением. У меня есть код следующим образом:WPF Button background and imagesource

<Button Grid.Row="0" Grid.Column="0" Content="1" FontSize="100" Foreground="White" > 
     <Button.Background> 
      <ImageBrush ImageSource="{Binding MyImgSource}" /> 
     </Button.Background> 
    </Button> 

Но мой вопрос, я хочу, чтобы фон кнопки, чтобы быть черным, прежде чем пользователь зайдет и нажмите на кнопку, так что не будет никакого изображения soruce не подавая до пользователь ударил его. Поэтому мне интересно, так или иначе, я могу сказать, что фон кнопки является черным, не поставляя черное изображение в качестве источника изображения?

ответ

1

Как я понимаю, вы хотите изменить фона один раз после того, как пользователь нажал кнопку ? В этом случае вы можете использовать стиль с анимацией:

<Window x:Class="ButtonBackground.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <Style x:Key="ButtonStyle" TargetType="Button"> 
      <Setter Property="Background" Value="Black"/> 
      <Setter Property="FontSize" Value="100"/> 
      <Setter Property="Foreground" Value="White"/> 
      <Style.Triggers> 
       <EventTrigger RoutedEvent="Click"> 
        <BeginStoryboard> 
         <Storyboard> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.Background)" > 
           <ObjectAnimationUsingKeyFrames.KeyFrames> 
            <DiscreteObjectKeyFrame> 
             <DiscreteObjectKeyFrame.Value> 
              <SolidColorBrush Color="Black"/> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
            <DiscreteObjectKeyFrame> 
             <DiscreteObjectKeyFrame.Value> 
              <!--<SolidColorBrush Color="Pink"/>--> 
              <ImageBrush ImageSource="{Binding MyImgSource}" /> 
             </DiscreteObjectKeyFrame.Value> 
            </DiscreteObjectKeyFrame> 
           </ObjectAnimationUsingKeyFrames.KeyFrames> 
          </ObjectAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Button Grid.Row="0" Grid.Column="0" Content="1" Style="{StaticResource ButtonStyle}" /> 
    </Grid> 
</Window> 

Если вы хотите вернуть Черный предысторию Баттона после нажатия, то ваш стиль будет:

 <Style x:Key="ButtonStyle" TargetType="Button"> 
      <Setter Property="Background" Value="Black"/> 
      <Setter Property="FontSize" Value="100"/> 
      <Setter Property="Foreground" Value="White"/> 
      <Style.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="Background"> 
         <Setter.Value> 
          <!--<SolidColorBrush Color="Pink"/>--> 
          <ImageBrush ImageSource="{Binding MyImgSource}" /> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style>