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

Silverlight Discussion :

Création de Border custom


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de cyberbobby
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut Création de Border custom
    Bonjour à tous,

    J'ai un petit souci en voulant créer une border custom.

    Voici le genre de résultat auquel j'aimerais arriver :



    Donc, pour se faire, j'ai créé un UserControl avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Grid x:Class="SLNolvelisForecastTest.CustomGrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
            <Border x:Name="Bord" BorderThickness="2" BorderBrush="Black" Margin="15,15,15,15" CornerRadius="3"/>
            <StackPanel x:Name="SP" Margin="30,3,0,0" Background="White" Height="25" Width="100" Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left">
                <TextBlock x:Name="TB" Margin="8,0,8,0" Text="Title" VerticalAlignment="Center" FontSize="16" FontWeight="Bold"/>
            </StackPanel>
        </Grid>
    </Grid>
    Tout fonctionne très bien mais j'aimerais ensuite pouvoir l'utiliser de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <Grid x:Name="LayoutRoot">
            <local:CustomGrid>
                <Button/>
            </local:CustomGrid>
        </Grid>
    Le problème est que mon contrôle refuse un Content.
    J'aurais voulu en quelque sorte Binder le Content de ma CustomGrid sur le contenu de la border qu'il contient.

    J'espère avoir été assez clair.

    Quelqu'un a-t-il une solution ?

    D'avance, je vous remercie.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Il faut que tu crée un control qui hérite de ContentControl et comme template par défaut tu mets ton xaml.

    Il faut juste rajouter un ContentPresenter au centre pour qu'il affiche ce que tu veux.

    Si il te manque des infos pour faire dis moi.

  3. #3
    Membre confirmé Avatar de cyberbobby
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    Extra ! Ca fonctionne !

    Merci pour ton aide, je suis arrivé exactement à ce que je voulais.

    Je ne connaissais pas le ContentControl, très pratique. ;-)

  4. #4
    Membre confirmé Avatar de cyberbobby
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    Bonjour,

    Finalement, je viens de détecter un souci ...

    Lorsque j'utilise ma Border :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <Grid x:Name="LayoutRoot">
            <CustomControls:TitleBorder Title="Date">
                <Button x:Name="BPrint"/>
            </CustomControls:TitleBorder>
        </Grid>
    Lorsque je regarde la valeur de ma variable BPrint après l'InitializeComponent, il vaut null, après le loaded aussi et bien après aussi. Par conte, si j'utilise l'événement Loaded du BPrint, je récupère bien le Button comme sender.

    Assez bizarre, une explication ?

    Voici le code de ma Border :

    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
     
    <ContentControl x:Class="Novelis.Forecast_Silverlight.CustomControls.TitleBorder"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <ContentControl.Template>
            <ControlTemplate>
                <Grid>
                    <Border BorderThickness="1" BorderBrush="Black" Margin="15,15,15,15" CornerRadius="0">
                        <ContentPresenter/>
                    </Border>
                    <StackPanel Margin="30,3,0,0" Background="White" Width="{Binding TextSize}" Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left">
                        <TextBlock Margin="8,0,8,0" Text="{Binding Title}" VerticalAlignment="Center" FontSize="16" FontWeight="Bold"/>
                    </StackPanel>
                </Grid>
            </ControlTemplate>
        </ContentControl.Template>   
    </ContentControl>

  5. #5
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Si sur la méthode "InitializeComponent" de ton MainPage.xaml.cs tu fais un "Go to definition" (F12), tu devrais accéder au fichier MainPage.g.i.cs qui contient les définitions C# de tes controles en XAML que tu as nommé.

    par exemple dans InitializeComponent tu pourrais trouver le canvas MonControl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.MonControl = ((System.Windows.Controls.Canvas)(this.FindName("MonControl")));
    Dans ton cas c'est le FindName qui ne parvient pas à "rentrer" dans ton ContentControl.

    Malheureusement, je crois que tu dois fixer la référence à ton control toi- même, à moins que quelqu'un ait une solution plus élégante ?

  6. #6
    Membre confirmé Avatar de cyberbobby
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    Mouais, ...

    Merci pour ta solution mais j'aimerais trouver une solution plus élégante comme tu dis.

    Skyounet, une idée peut-être ?

Discussions similaires

  1. Création d'un custom control
    Par bla69136 dans le forum MFC
    Réponses: 5
    Dernier message: 07/03/2008, 15h30
  2. Création d'un custom menu
    Par stephane92400 dans le forum JSF
    Réponses: 33
    Dernier message: 25/09/2007, 11h47
  3. Réponses: 1
    Dernier message: 12/11/2006, 01h01
  4. [JSF] Création de validateurs custom
    Par mymyma dans le forum JSF
    Réponses: 3
    Dernier message: 28/06/2006, 15h32
  5. [MFC] Création d'un 'custom control'
    Par r0d dans le forum MFC
    Réponses: 5
    Dernier message: 03/02/2006, 10h23

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