IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[Button] Comment utiliser une ImageSource ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut [Button] Comment utiliser une ImageSource ?
    Bonjour,

    je veux faire un bouton avec un fond qui peut changer suivant une valeur d'une propriété d'un objet.

    J'ai une classe qui dérive de Button, et qui a une propriété de type ImageSource, qui donne l'image qui doit être utilisée pour le bouton.

    et là, je ne trouve pas comment initialiser cette propriété du bouton pour afficher quelque chose.

    le code pour voir le problème :

    la classe qui dérive de Button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    namespace SourceButton
    {
    publicclassNewButton : Button
    {
    public NewButton()
    {
    Source = newBitmapImage(newUri("pack://application:,,,/Collines.jpg"));
    }
    publicImageSource Source
    {
    get { return (ImageSource)GetValue(SourceProperty); }
    set { SetValue(SourceProperty, value); }
    }
    publicstaticreadonlyDependencyProperty SourceProperty =
    DependencyProperty.Register("Source", typeof(ImageSource), typeof(NewButton), newUIPropertyMetadata(newBitmapImage( newUri("pack://application:,,,/Collines.jpg"))));
    }
    }
    la fenêtre principale, je définis deux styles, un qui affiche une image déclarée dans les ressources de la fenetre, et un qui utilise un Binding sur le bouton pour trouver l'image à afficher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <Window x:Class="SourceButton.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sourcebutton="clr-namespace:SourceButton"
    Title="Window1"
    Height="300"
    Width="300">
    <Window.Resources>
    <ImageSource x:Key="TheImage">pack://application:,,,/Collines.jpg</ImageSource>
    <Style x:Key="TheButtonStyle" TargetType="{x:Type sourcebutton:NewButton}">
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type sourcebutton:NewButton}">
    <Border BorderBrush="BlueViolet"
    BorderThickness="5">
    <Image Source="{Binding Path=Source, RelativeSource={RelativeSource Self}}" />
    </Border>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>
    <Style x:Key="TheButtonStyle2"
    TargetType="{x:Type sourcebutton:NewButton}">
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type sourcebutton:NewButton}">
    <Border BorderBrush="Tomato"
    BorderThickness="5">
    <Image Source="{StaticResource TheImage}" />
    </Border></ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>
    </Window.Resources>
    <Grid>
    <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
    </Grid.RowDefinitions>
    <sourcebutton:NewButton Style="{StaticResource TheButtonStyle}" />
    <sourcebutton:NewButton Grid.Row="1" Style="{StaticResource TheButtonStyle2}" />
    </Grid>
    </Window>
    Voilà, le bouton qui est censé afficher l'image en utilisant le Binding avec la propriété du NewBouton est toujours vide.
    Qu'est ce que je fais de travers ?

    (en passant, si quelqu'un sait comment je peux garder l'indentation quand je copicolle à partir de VS, ça pourrait être sympa )

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    je vais repondre a cote mais vois un bouton avec une image dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Image Height="16" Width="16" Source="/SentinelSAS.Compoments;component/icons/im_search.png" />
    maintenant tu peux mettre en font l'image si tu veux et faire un binder sur la source de l'image avec ton imagesource

    ou mieux encore utilise une imagebrush pour ton background ca sera encore plus simple
    tu peux regarder ici
    http://msdn.microsoft.com/en-us/library/ms771670.aspx

    sinon avec google cherche wpf imagebrush

Discussions similaires

  1. [FOP][Java] comment utiliser une police
    Par elzedo dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 01/12/2006, 18h40
  2. [TOMCAT]comment utiliser une JNI ?
    Par v1nc3kr0 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 21/07/2005, 17h15
  3. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50
  4. Réponses: 8
    Dernier message: 28/01/2005, 08h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo