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 :

[Expert] override DynamicResourceExtension


Sujet :

Windows Presentation Foundation

  1. #1
    Membre expérimenté
    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
    Points : 1 313
    Points
    1 313
    Par défaut [Expert] override DynamicResourceExtension
    bonjour
    j'aimerais creer mon markup conv:VisualBrush
    qui permet de reccuperer une resource dynamique (d'ou l'heritage)
    et de le transformer en VisualBrush
    pour l'utiliser comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Rectangle Width="15"
    Height="18"
    Fill="red"
    OpacityMask="{conv:VisualBrush appbar_page_file_del_tag}" />
    si a l'execution ca marche impec, dans l’éditeur ca cree un bug sur la visu de la page
    avec "Canvas n'est pas une proprieté valide pour OpacityMask"

    appbar_page_file_del_tag est effectivement un canvas

    quelqu'un a t'il une solution pour masquer cette erreur

    pour info voici le code de mon markup
    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
      [MarkupExtensionReturnType(typeof(object))]
        public class VisualBrushExtension : DynamicResourceExtension
        {
            public VisualBrushExtension() : base() { }
            public VisualBrushExtension(object resourceKey) : base(resourceKey) { }
            public override object ProvideValue(IServiceProvider serviceProvider)
            {
                VisualBrush v = null;
                Canvas c = Application.Current.FindResource(this.ResourceKey) as Canvas;
                if (c != null)
                {
                    v = new VisualBrush(c);
                }
                return v;
            }
        }
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Le nom string de la ressource doit être fournie soit sous forme soit :
    - sous forme d'un paramétré dans un 2eme ctor public paramétré ,
    ,le ctor public sans paramètre étant exigible !!!
    - de propriété ce qui exige de la spécifier dans la prop Path xaml du Class....
    code .cs versus ctor public paramétré :
    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
     
     
    namespace WpfMarkupExtCanvas
    {
         public  class VisualBrushExtension1: MarkupExtension
        {   
            private VisualBrush v ;
     
            public VisualBrushExtension1()
            { }
            public VisualBrushExtension1(string key)
            {
                FrameworkElement c = Application.Current.FindResource(key) as FrameworkElement;
                v = new VisualBrush(c);
     
            }
            public override object ProvideValue(IServiceProvider
             serviceProvider)
            {
                if ((v  != null) )
                    return v;
                else throw new InvalidOperationException("Inputs cannot be blank");
            }
        }
    }
    code .cs versus prop Path xaml :
    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
     
    namespace WpfMarkupExtCanvas
    {
        public class VisualBrushExtension2 : MarkupExtension
        {
     
            public string Source { get; set; }
            private static VisualBrush Parse(string key)
            {
     
                FrameworkElement c = Application.Current.FindResource(key) as FrameworkElement;
                VisualBrush v = new VisualBrush(c);
                return v;
            }
     
            public VisualBrushExtension2()
            { }
     
            public override object ProvideValue(IServiceProvider
             serviceProvider)
            {
                if ((Source != null) )
                    return Parse(Source);
                else throw new InvalidOperationException("Inputs cannot be blank");
            }
     
        }
    }
    code xaml du App.xaml:
    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
     
     
    <Application x:Class="WpfMarkupExtCanvas.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:conv="clr-namespace:WpfMarkupExtCanvas"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
            <Canvas x:Key="cnv"
                    Width="200"  Height="200" Background="#76FF00FF"  >
                <Ellipse Width="150" Height="100" Stroke="Red"  >
                    <Ellipse.Fill>
                        <LinearGradientBrush 
                            StartPoint="0,0" EndPoint="1,1">
                            <GradientStop Color="#5E3DFF00" Offset="0.0" />
                            <GradientStop Color="#4F0000FF" Offset="0.75" />
     
                        </LinearGradientBrush>
                    </Ellipse.Fill>
                </Ellipse>
     
            </Canvas>
     
            <DockPanel x:Key="pnl">
                <StackPanel Margin="5" x:Name="Panel">
                    <Button>Button</Button>
                    <CheckBox>CheckBox</CheckBox>
                    <TextBox></TextBox>
                </StackPanel>
            </DockPanel>
        </Application.Resources>
    </Application>
    code xaml du Form :
    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
     
    <Window x:Class="WpfMarkupExtCanvas.Window2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:conv="clr-namespace:WpfMarkupExtCanvas"
            Title="Window2" Height="300" Width="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Rectangle Grid.Row="0" Width="150" Height="180"  Fill="Goldenrod"   OpacityMask="{conv:VisualBrushExtension1 cnv}"/>
            <Rectangle Grid.Row="1" Width="150" Height="180"  Fill="Blue"  OpacityMask="{conv:VisualBrushExtension2  Source=pnl}"/>
     
        </Grid>
    </Window>
    est-ce clair !!!...
    bon code ...

  3. #3
    Membre expérimenté
    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
    Points : 1 313
    Points
    1 313
    Par défaut
    merci
    ca marche vraiment bien
    étonnamment mon code ressemblait bien
    sauf qu'il fallait pas hériter lol

    encore merci
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

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

Discussions similaires

  1. Expert DLL de ressources
    Par alex4 dans le forum EDI
    Réponses: 5
    Dernier message: 29/04/2004, 12h07
  2. [VB6][Expert Only ?][ADO] Format universel des dates
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 14/02/2004, 10h42
  3. Avantages de OnSomething / override
    Par Bruno75 dans le forum Langage
    Réponses: 7
    Dernier message: 20/10/2003, 19h49
  4. système expert ou pas
    Par Rmotte dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 03/10/2003, 13h36
  5. Problème d'override...
    Par NeoMan dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2003, 14h21

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