2016-04-08 2 views
1

au moment où j'essaie d'entrer dans la programmation WPF. Pour cela, je veux créer une petite application avec une interface utilisateur à la recherche d'une apparence décente. Mais maintenant je cours dans un problème. Tout d'abord, mon interface utilisateur devrait ressembler à ceci: My interface so farCréer une interface utilisateur avec plusieurs pages empilées les unes sur les autres en C#

J'ai pensé à créer une fenêtre principale avec plusieurs boutons pour choisir ce que vous voulez faire. Lorsque j'appuie sur l'un de ces boutons, tous les contrôles pour cela doivent être visibles sur la droite. Donc, pour chaque bouton, il devrait y avoir une nouvelle "fenêtre" sur le côté droit, où le panneau darkgray avec la ligne noire est.

Ma première solution est de créer une nouvelle fenêtre (fichier .xaml) pour chaque bouton, qui pourrait être sélectionné. Mais j'ai rencontré le problème suivant. Chaque fois que je clique sur ma première fenêtre, la deuxième fenêtre sera mise à l'arrière-plan. Je l'ai déjà fixé quand je bouge la première fenêtre, que la deuxième fenêtre sera mise à une nouvelle position et sera également au premier plan. La définition de la propriété .TopMost sur ma deuxième fenêtre n'est pas une option, car je n'aime pas que ce soit sur ma barre d'outils. Donc, ma question est: Y at-il une meilleure façon de créer mon interface que d'avoir plusieurs fenêtres qui ne sont ouvertes que lorsqu'un bouton est pressé? Mais je pourrais créer plus de boutons, donc je voudrais avoir quelque chose qui est facilement extensible.

S'il s'agit de la seule bonne option pour conserver la vue d'ensemble de toutes les commandes. Puis-je empêcher la première fenêtre de passer au premier plan lorsque je n'appuie pas sur un bouton?

Si vous souhaitez plus d'informations, merci de laisser un commentaire. Merci pour chaque réponse! Ayez un beau jour, Heenne

Répondre

0

Avez-vous considéré comme un TabControl plutôt que des boutons pour sélectionner chaque "fenêtre". Quoi que vous fassiez, j'éviterais certainement d'avoir une fenêtre séparée pour chacun, car cela serait très désordonné. Ce que je ferais est de créer chaque cadre comme un UserControl et non comme une fenêtre dans un xaml séparé comme vous le suggérez (avec xaml.cs associé et ainsi de suite). Vous pouvez ensuite mettre ce contrôle utilisateur où vous voulez - dans un contrôle onglet par exemple.

<UserControl x:Class="Page1" 
    ...> 

    <Grid>  
     <!--your controls here--> 
    </Grid> 
</UserControl> 

puis dans la fenêtre principale, vous pourriez avoir

<TabControl> 
    <TabItem Header="Tab 1"> 
     <ns:Page1 /> 
    </TabItem> 
</TabControl> 

ns sera l'espace de noms pour votre contrôle utilisateur

Ou vous pouvez simplement définir dans la fenêtre principale XAML et définir la visibilité visible lorsque vous cliquez sur le bouton. Idéalement, vous devriez le faire via une liaison vers une classe ViewModel définie comme votre DataContext

<ns:Page1 Visibility="{Binding page1Visible}"/> 

Ou bien ont une teneur présente

<ContentPresenter Content="{Binding CurrentPage}"/> 

Réglez ensuite PageCourante être une instance de contrôle de l'utilisateur lorsque la le bouton est cliqué.

Il y a plusieurs façons de peler un chat comme on dit.

+0

Merci pour votre réponse! Je voudrais l'augmenter, mais je ne suis pas au 15 rep. Je vais essayer de le faire d'abord avec TabControl-way et ensuite essayer de créer mon propre design avec ContentPresenter ou alors ... je verrai. – Heenne

+0

Aucun problème. J'ai upvoted votre question pour aider votre réputation. :) –

+0

Oh, merci! Mais maintenant j'ai une autre demande. Pourriez-vous m'aider avec la solution en utilisant le TabControl? J'ai eu ceci jusqu'ici: J'ai créé un nouveau projet avec ma mainwindow qui contient le TabControl. Puis j'ai ajouté un UserControl nommé "ManualCalculator.xaml" à mon projet. Est-ce que je comprends ce droit, qu'ils sont tous les deux dans le même espace de noms? Parce que vous avez créé un espace de nom supplémentaire pour le contrôle de l'utilisateur ... Parce que quand je veux créer un espace de noms supplémentaire, le nouveau UserControll n'apparaît pas. EDIT: ah ben, j'ai cherché l'espace de noms ProjectName.UserclassName ... c'était l'erreur – Heenne

0

approches possibles

1} une fenêtre principale avec un Frame où un nouveau Page sera chargé dans ce cadre après le bouton de menu, cliquez sur

il est simple de créer un spécialisée page (dans un fichier séparé) pour chaque fonction de l'application

article lié Navigation with MVVM dans le blog Rachel Lim

2} une fenêtre principale avec plusieurs onglets (similaire aux navigateurs). Les onglets peuvent être prédéfinis ou peuvent être ajoutés à la demande (plusieurs onglets pour chaque fonction de l'application, si cela est pris en charge?)

les deux sont des variantes de - MDI, l'interface de documents multiples