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 :

Modifier un template écrit en XAML via le code C#


Sujet :

Windows Presentation Foundation

  1. #1
    Invité
    Invité(e)
    Par défaut Modifier un template écrit en XAML via le code C#
    Bonjour à tous,

    Je viens juste de m'inscrire car j'ai trouvé sur ce site beaucoup de réponses à mes questions.

    Je suis actuellement en train de réaliser une colonne personnalisée pour un DataGrid. Pour cela j'hérite d'un DataGridTemplateColumn. J'ai créé ma classe qui est séparée entre un code XAML et un code C#.

    Voici le contenu de mon XAML :


    Code xml : 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
    <WpfToolkit:DataGridTemplateColumn x:Class="UserGrid.DataGridBrowseColumn"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:WpfToolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
                 Width="100"
                 >
     
        <WpfToolkit:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=Test}"/>
            </DataTemplate>
        </WpfToolkit:DataGridTemplateColumn.CellTemplate>
        <WpfToolkit:DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition Width="20"/>
                    </Grid.ColumnDefinitions>
                    <TextBox Grid.Column="0" VerticalAlignment="Center" Name="Edition" Text="{Binding Path=Test}"/>
                    <Button Grid.Column="1" Click="Button_Click">
                        <Button.ContentTemplate>
                            <DataTemplate>
                                <Image Source="/UserGrid;component/Images/arrow_down.ico" />
                            </DataTemplate>
                        </Button.ContentTemplate>
                    </Button>
                </Grid>
            </DataTemplate>
        </WpfToolkit:DataGridTemplateColumn.CellEditingTemplate>
     
    </WpfToolkit:DataGridTemplateColumn>

    Voilà mon problème : j'ai besoin d'accéder à mes textblock et mon button afin d'en changer dynamiquement le binding via le code C#.
    Malgré les propriétés Name que j'ai ajouté, je ne parviens pas à y accéder.

    Quelle est la meilleure méthode pour réaliser cela ?
    J'ai déjà essayé de tout faire en code-behind, mais je n'avais aucune visibilité sur ce que je faisais.

    Merci d'avance.
    Dernière modification par Deepin ; 18/04/2011 à 11h39. Motif: Coloration syntaxique

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Points : 420
    Points
    420
    Par défaut
    Bonjour,
    la première colonne n'affiche rien non plus ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Euh, à vrai dire je ne comprends pas bien votre question.

    En fait, ce code fonctionne si c'est ce que vous voulez savoir. Cela m'affiche bien ce que je veux, mais ici le binding est écrit en dur, et j'aimerais pouvoir le modifier dynamiquement, donc en C# via la code-behind.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Voici mon code C# si cela peut vous aider :


    Code c# : 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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using Microsoft.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace UserGrid
    {
        /// <summary>
        /// Logique d'interaction pour DataGridBrowseColumn.xaml
        /// </summary>
        public partial class DataGridBrowseColumn : Microsoft.Windows.Controls.DataGridTemplateColumn
        {
            public Binding Binding
            {
                set
                {
                }
            }
     
     
            public DataGridBrowseColumn()
                : base()
            {
                InitializeComponent();
     
            }
     
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                Microsoft.Windows.Controls.MessageBox.Show("Pas encore implémenté, mais presque.", "Non !!", MessageBoxButton.OK,MessageBoxImage.Asterisk);
            }
        }
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    Voilà la solution !

    Code XML : 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
    <sdk:DataGridTemplateColumn x:Class="SilverlightGrid.DataGridDateColumn"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
                 Width="100"
                 >
     
        <!-- Template de la cellule en affichage standard -->
        <sdk:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock VerticalAlignment="Center" Padding="5 0 5 0" Loaded="TextBlock_Loaded" />
            </DataTemplate>
        </sdk:DataGridTemplateColumn.CellTemplate>
     
        <!-- Template de la cellule en mode édition -->
        <sdk:DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <sdk:DatePicker Loaded="DatePicker_Loaded" />
            </DataTemplate>
        </sdk:DataGridTemplateColumn.CellEditingTemplate>
     
    </sdk:DataGridTemplateColumn>

    Code c# : 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
    45
    46
    47
    48
    49
    50
    51
    using System.Windows;
    using System.Windows.Data;
    using System.Windows.Controls;
     
    namespace SilverlightGrid
    {
        /// <summary>
        /// Logique d'interaction pour DataGridDateColumn.xaml
        /// </summary>
        public partial class DataGridDateColumn : DataGridTemplateColumn
        {
            private Binding _Binding;
            private string _strFormat = "dd/MM/yyyy";
     
            public Binding Binding
            {
                set { _Binding = value; _Binding.StringFormat = _strFormat; }
                get { return _Binding; }
            }
     
            public string StringFormat
            {
                set { _Binding.StringFormat = value; _strFormat = value; }
                get { return _strFormat; }
            }
     
            private TextBlock DispMode;
            private DatePicker EditMode;
     
            public DataGridDateColumn()
                : base()
            {
                InitializeComponent();
                DispMode = new TextBlock();
                EditMode = new DatePicker();
            }
     
            private void TextBlock_Loaded(object sender, RoutedEventArgs e)
            {
                DispMode = (TextBlock)sender;
                DispMode.SetBinding(TextBlock.TextProperty, this._Binding);
            }
     
            private void DatePicker_Loaded(object sender, RoutedEventArgs e)
            {
                EditMode = (DatePicker)sender;
                EditMode.SetBinding(DatePicker.TextProperty, this._Binding);
                EditMode.SetBinding(DatePicker.SelectedDateProperty, this._Binding);
            }
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modification de la valeur d'une Window.Resources xaml via le code d'un module
    Par Golard dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 05/05/2015, 23h13
  2. Modifier le template de equals et hashCode
    Par Baptiste Wicht dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/04/2007, 15h26
  3. [Joomla!] Impossible de modifier le template par défaut
    Par MarcS dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 28/03/2007, 16h57
  4. Modifier une valeur d'option PHP via .htaccess
    Par Helfima dans le forum Apache
    Réponses: 3
    Dernier message: 10/12/2006, 20h45
  5. comment modifier le nom d'une colonne via VBA?
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 24/11/2005, 15h36

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