Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[WPF] Comment se binder à un contrôle Run ?

Pour afficher du texte, WPF (Windows Presentation Foundation) propose un certains nombres de contrôles (TextBlock, Label, etc...).

Parmis ces contrôles, il existe le contrôle "Run" qui possède les mêmes caractéristiques qu'un TextBlock mais qui ne peut pas être positionné: on l'utilise donc via une imbrication dans un TextBlock.

Ce contrôle, qui possède une propriété Text permettant de spécifier le texte à afficher, est très intéressant mais pose un problème: cette propriété Text n'est pas une DependencyProperty autrement dit, il n'est pas possible de se binder dessus...

Pour corriger ce problème, je vous propose une implémentation d'une classe, héritant de Run, proposant justement une proriété que vous allez pouvoir binder.

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows;

using System.Windows.Documents;

 

namespace WPFDeveloperTools.Controls.BindableRunControl

{

    /// <summary>

    /// BindableRunControl is a control that inherit from the Run control but which have a bindable Text Property.

    /// </summary>

    public class BindableRunControl : Run

    {

        #region Constructors

 

        public BindableRunControl()

            : base()

        {

        }

 

        #endregion

 

        #region Properties

 

        /// <summary>

        /// Property to use to specify the text that need to be binded.

        /// </summary>

        public string BindableText

        {

            get { return (string)GetValue(BindableTextProperty); }

            set { SetValue(BindableTextProperty, value); }

        }

 

        public static readonly DependencyProperty BindableTextProperty =

            DependencyProperty.Register("BindableText", typeof(string), typeof(BindableRunControl), new FrameworkPropertyMetadata(string.Empty, new PropertyChangedCallback(OnBindableTextChanged)));

 

        #endregion

 

        private static void OnBindableTextChanged(DependencyObject element, DependencyPropertyChangedEventArgs arg)

        {

            string TextToBind = arg.NewValue as string;

 

            if (!string.IsNullOrEmpty(TextToBind))

            {

                BindableRunControl control = element as BindableRunControl;

 

                if (control != null)

                {

                    control.Text = TextToBind;

                }

            }

        }

    }

}

J'espère que cela vous sera utile au cours de vos projets Wink

Pour informations, ce contrôle fait partie d'un ToolKit que j'avais mis à disposition sur Internet (via Codeplex) et que j'ai dû enlever mais qui, je l'espère, fera sa réapparition très bientôt.

 

A+

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 20 décembre 2007 09:55 par Thomas LEBRUN
Classé sous : ,

Commentaires

patrice a dit :

Pourquoi tu as du retir le Fun Controls Bag ?

# décembre 20, 2007 12:26

Thomas LEBRUN a dit :

Pour faire simple, c'est parce qu'à l'époque où je l'ai écrit, j'était en stage chez Microsoft donc tout le processus pour les projets Codeplex est différent (passe par la hiérarchie, etc...)

Maintenant, je vais pouvoir le remettre à disposition plus simplement :)

# décembre 20, 2007 12:39
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- EF et WPF par Matthieu MEZIL le il y a 15 heures et 43 minutes

- C# : Vérifications / Performances par Pierrick's Blog le il y a 19 heures et 18 minutes

- Du nouveau sur le clubvsts par Noham Choulant le il y a 20 heures et 58 minutes

- StyleCop SDK disponible par Michel Perfetti [Miiitch] le il y a 23 heures et 18 minutes

- Data Structures and Algorithms : un livre gratuit par Elise's blog le 08-29-2008, 11:39

- [ASP.NET] - Ajax vNext Preview 2 par Aurelien's Blog - When ClientSide meets .Net le 08-29-2008, 10:35

- TPH IS Not Null sur la relation par Matthieu MEZIL le 08-29-2008, 08:15

- Mise à jours du code Source du .NET Framework 3.5 SP1 disponible sur le Reference Source Code Center par RedoBlog - The .NET Gentleman !!! le 08-29-2008, 01:50

- ASP.net 3.5 SP1 : combiner les fichiers JavaScript grace au CompositeScript du ScriptManager (ex ScriptCombining du toolkitScriptManager) par Atteint de JavaScriptite Aiguë [Cyril Durand] le 08-28-2008, 22:39

- [Expression Web] Problème : Quand j'affiche l'Aide (F1), cela me met un message d'erreur. par Expression Web & Me le 08-28-2008, 19:44