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 :

Style et Template pour un menu


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut Style et Template pour un menu
    Bonjour,
    Je me confronte à un problème qui reste pour l'heure sans solution:
    A l'heure actuelle je crée un Menu et un TreeView dans ma fenêtre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <DockPanel x:Name="dpOldMainMenu">
                <Menu Name="menu1" DockPanel.Dock="Top" >
                    <MenuItem Header="Main Menu" ItemsSource="{Binding}" />
                </Menu>
            </DockPanel>
     
            <DockPanel x:Name="dpTreeView" Grid.Row="1">
                <TreeView x:Name="tv1">
                    <TreeViewItem ItemsSource="{Binding}" Header="Menu Principal"/>
                </TreeView>
            </DockPanel>
    Ces deux composants sont remplis de la même manière grâce à une collection perso et un HierarchicalDataTemplate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <HierarchicalDataTemplate DataType="{x:Type local:ActionItem}" ItemsSource="{Binding}">
            <TextBlock Text="{Binding Path=Text}"/>
        </HierarchicalDataTemplate>
    Tout cela marche très bien et le rendu visuel est ce que j'attends.
    Ma collection contient des ActionItem qui peuvent eux-mêmes en contenir d'autres, d'où la définition de l'ItemsSource.

    Ce que je voudrais faire maintenant, c'est d'avoir un seul ItemsControl auquel je puisse appliquer soit un style qui me permette d'avoir un affichage sous forme de menu (pour remplacer mon "menu1") soit un affichage sous forme de TreeView (pour remplacer mon "tv1"). Après de multiples tentatives, je n'ai pas obtenu de solution convenable c'est pourquoi je viens demander de l'aide ici.

    Merci d'avance, n'hésitez pas à me demander si certaines choses ne sont pas claires.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut
    J'avance peu à peu dans mes recherches mais j'ai une question qui peut paraitre bête, tant pis je la pose quand même:
    Comment effectuer la déclaration suivante dans le .cs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MenuItem Header="Main Menu" ItemsSource="{Binding}" />
    Si quelqu'un peut m'aider....

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut
    J'ai résolu mon problème d'ItemsSource en passant par celui du parent de mon MenuItem.
    Mon dernier problème est: Comment créer un Template et/ou un style qui me permette d'avoir un visule de TreeView pour mon Menu et comment passer du style de base (Menu) à celui créé (TreeView).

    Merci d'avance!!!!!!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut
    Si personne n'a la solution complète à mon problème, j'aimerais déjà pouvoir avoir un exemple qui me permette de voir comment modifier le rendu visuel d'un MenuItem (l'afficher sous forme de bouton par exemple...).

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Utilise un Template que tu appliques à tes MenuItem: http://msdn2.microsoft.com/en-us/library/ms747082.aspx

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut
    Merci mais je n'arrive pas à faire ce qu'il faut, il me manque forcément quelque chose mais je n'arrive pas à trouver.
    J'ai mon propre ItemsControl => CustomItemsControl qui dérive d'ItemsControl en ajoutant une propriété Mode (pour me permettre d'avoir le mode d'affichage).
    Je lui affecte un DataContext et un ItemsSource par le code.
    J'ai tenté de lui appliquer un style pour avoir un visuel de TreeView/TreeViewItem mais là ça plante dès que j'essaye d'afficher.....

    Mon Style:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton">
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ToggleButton">
                        <Grid
              Width="15"
              Height="13"
              Background="Transparent">
                            <Path x:Name="ExpandPath"
                HorizontalAlignment="Left" 
                VerticalAlignment="Center" 
                Margin="1,1,1,1"
                Fill="{StaticResource GlyphBrush}"
                Data="M 4 0 L 8 4 L 4 8 Z"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsChecked"
                   Value="True">
                                <Setter Property="Data"
                    TargetName="ExpandPath"
                    Value="M 0 4 L 8 4 L 4 8 Z"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
     
        <DataTemplate x:Key="dtMenuItem">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition MinWidth="19"
                          Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <ToggleButton x:Name="Expander"
                      Style="{StaticResource ExpandCollapseToggleStyle}"
                      IsChecked="{Binding Path=IsExpanded,
                                  RelativeSource={RelativeSource TemplatedParent}}"
                      ClickMode="Press"/>
                <Border Name="Bd"
                  Grid.Column="1">
                    <ContentPresenter x:Name="PART_Header"
                          ContentSource="Text"/>
                </Border>
                <ItemsPresenter x:Name="ItemsHost"
                      Grid.Row="1"
                      Grid.Column="1"
                      Grid.ColumnSpan="2"/>
            </Grid>
        </DataTemplate>
        <Style x:Key="MainOldStyle" TargetType="src:CustomItemsControl">
            <Setter Property="OverridesDefaultStyle" Value="True" />
            <Setter Property="SnapsToDevicePixels" Value="True" />
            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="src:CustomItemsControl">
                        <Border 
              Name="Border" 
              CornerRadius="1" 
              Background="{StaticResource WindowBackgroundBrush}"
              BorderBrush="{StaticResource SolidBorderBrush}"
              BorderThickness="1" >
                            <ScrollViewer 
                Focusable="False"
                CanContentScroll="False"
                Padding="4">
                                <ItemsPresenter/>
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="ItemTemplate" Value="{DynamicResource dtMenuItem}"/>
        </Style>
    Le code C#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private CustomItemsControl MainMenu = new CustomItemsControl();
     
            public Window1()
            {
                InitializeComponent();
                rdResources = new ResourceDictionary();
                rdResources.Source = new Uri(@"C:\Documents and Settings\lroisin\Mes documents\Visual Studio 2008\Projects\TestTreeView\TestTreeView\rdTreeViewTemplate.xaml");
                ActionItemStore store = new ActionItemStore(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location));
                List<ActionItem> actionItems = store.GetActionItems();
                MainMenu.DataContext = actionItems;
                MainMenu.ItemsSource = actionItems;
                MainMenu.Style = rdResources["MainOldStyle"] as Style;
                dpOldMainMenu.Children.Add(MainMenu); //Problème!!!!!!!!!
            }
    Tout fonctionne bien jusqu'à l'ajout au visuel.....
    Je suis perdu

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

Discussions similaires

  1. style pour un menu imbriqué
    Par ghyosmik dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 08/03/2007, 21h07
  2. [Boucle Infinie] pour un menu
    Par NhyMbuS dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2005, 10h14
  3. Feuille de style avec XML (pour expert !)
    Par jer_the_one dans le forum Composants VCL
    Réponses: 8
    Dernier message: 11/08/2004, 09h48
  4. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 01h47

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