web-dev-qa-db-fra.com

Comment changer \ définir l'image d'arrière-plan d'un bouton dans le code C # WPF?

J'essaie de changer l'image d'arrière-plan de mon bouton en une autre image et j'ai rencontré des erreurs. Voici le code que j'ai sur mon xaml:

    <Button x:Name="Button1" Width="200" Height="200" Content="Button1" Margin="0,0,0,400">
        <Button.Background>
            <ImageBrush **ImageSource ="Images/AERO.png"**  ></ImageBrush>
        </Button.Background>
    </Button>

et mon cs:

    private void Button1_Click_1(object sender, RoutedEventArgs e)
    {
        var brush = new ImageBrush();
        brush.ImageSource = new BitmapImage(new Uri("Images/AERO.png"));
        Button1.Background = brush;
    }

L'erreur que j'ai sur mon xaml est "Le fichier 'Images\logo.png' ne fait pas partie du projet ou sa propriété 'Build Action' n'est pas définie sur 'Resource'. Quelqu'un peut-il m'aider à expliquer, merci

8
Jaz

Dans l'action de génération, vous pouvez marquer le fichier image comme contenu ou comme ressource. La syntaxe pour utiliser l'image dans un ImageBrush est différente selon celle que vous choisissez.

Voici un fichier image marqué comme conten.

Image, marked as content

Pour définir l'arrière-plan du bouton sur cette image, utilisez le code suivant.

 var brush = new ImageBrush();
 brush.ImageSource = new BitmapImage(new Uri("Images/ContentImage.png",UriKind.Relative));
 button1.Background = brush;

Voici un fichier image marqué comme ressource.

Image, marked as resource

Pour définir l'arrière-plan du bouton sur l'image de ressource, utilisez le code suivant.

  Uri resourceUri = new Uri("Images/ResourceImage.png", UriKind.Relative);
  StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri);

  BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream);
  var brush = new ImageBrush();
  brush.ImageSource = temp;

  button1.Background = brush;
15
Walt Ritscher

Je donne un extrait de code ci-dessous, en attribuant le style mentionné dans l'extrait de code à un bouton ou à un bouton bascule, puis vous aurez le fond modifié entièrement contrôlé par XAML ... aucun autre codage n'est nécessaire. Je ne donne pas tout le code, essayez simplement de comprendre la logique derrière;)

<Style x:Key="KeyStopButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                                  x:Name="Border"
                                  CornerRadius="1"
                                  BorderThickness="1">
                    <Border.Background>                            
                        <ImageBrush ImageSource= "..\Images\ButtonImages\StopButton.png"  Stretch="Uniform"/>
                    </Border.Background>                        
                    <Border.Effect>                            
                        <DropShadowEffect/>                                
                    </Border.Effect>
                </Border>
                <ControlTemplate.Triggers>                        
                    <Trigger Property="IsPressed" Value="true">
                        <Setter TargetName="Border" Property="Border.Effect" Value="{x:Null}"/>                                                            
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="KeyPlayPauseButtonStyle" TargetType="{x:Type ToggleButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ToggleButton">
                <Border TextBlock.Foreground="{TemplateBinding Foreground}"
                                  x:Name="Border"
                                  CornerRadius="1"
                                  BorderThickness="1">
                    <Border.Background>
                        <ImageBrush ImageSource= "..\Images\ButtonImages\PlayButton.png"  Stretch="Uniform"/>
                    </Border.Background>
                    <Border.Effect>
                        <DropShadowEffect/>
                    </Border.Effect>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="true">
                        <Setter TargetName="Border" Property="Border.Background">
                            <Setter.Value>
                                <ImageBrush ImageSource= "..\Images\ButtonImages\PauseButton.png" Stretch="Uniform"/>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
3
Evren Gunay

S'il n'est pas inclus, incluez le fichier "Image\Logo.png" dans le projet. Ensuite, définissez son action de génération sur "Ressource" en visitant l'onglet des propriétés de ce fichier (clic droit).

Setting action to build resource

En outre, je ne sais pas ce que vous essayez de faire dans le gestionnaire de clic du bouton. Vous définissez déjà l'image d'arrière-plan dans le XAML. À moins que vous ne la définissiez sur une autre image dans le gestionnaire de clic, ce code n'est pas nécessaire.

1
Kohanz