2013-05-20 4 views
1

Je tente de créer un contrôle utilisateur qui héberge un contrôle onglet.Contrôle utilisateur WPF avec contrôle onglet

Ma question est, comment puis-je exposer le contrôle onglet via le contrôle de l'utilisateur afin que nous puissions ajouter des onglets?

Le contrôle entier abritera trois zones: les boutons de commande en haut, le contrôle de tabulation et un bloc de texte stylé qui affiche les messages. Les boutons de commande seront configurables en tant que dépendances, de sorte que nous pouvons choisir d'afficher ou non le bouton d'application lorsque nous utilisons la commande usercontrol. Je suis un concepteur et non un développeur, alors j'essaie de me mettre les pieds dans l'eau pour construire ce contrôle, mais je suis un peu dans la tête.

Je n'ai aucun problème à fouiller le XAML pour ce que j'essaye d'accomplir, juste avoir du mal à le rendre réutilisable.


Plus de détails sur ce que j'ai essayé jusqu'à présent (je n'ai encore rien essayé dans les réponses).

J'ai essayé d'ajouter un DependencyProperty qui exposerait la collection pour le ItemsSource TabControl:

public IEnumerable<object> TabSource 
    { 
     get { return (IEnumerable<object>)GetValue(TabSourceProperty); } 
     set { base.SetValue(FunctionPanel.TabSourceProperty, value); } 
    } 

    public static DependencyProperty TabSourceProperty = DependencyProperty.Register(
     "TabSource", 
     typeof(IEnumerable<object>), 
     typeof(FunctionPanel)); 

Et puis se lier à elle dans le XAML de contrôle de l'utilisateur:

<TabControl Grid.Row="1" ItemsSource="{Binding TabSource}" /> 

Enfin, je voudrais pour l'utiliser dans la fenêtre XAML comme ceci:

<local:FunctionPanel> 
    <local:FunctionPanel.TabSource> 
    <TabItem Header="Test" /> 
    </local:FunctionPanel.TabSource> 
</local:FunctionPanel> 

Mais cela retourne TabS ource est méconnaissable ou inaccessible. Je vais essayer les solutions fournies ci-dessous.

+0

Eh bien, vous pourriez exposer un autre 'DependencyProperty' pour une collection que vous lier à la ItemsSource du contrôle onglet. – Thelonias

+0

Je préfère utiliser un ViewModel approprié et utiliser le UserControl comme vue. –

Répondre

1

Ma question est, comment puis-je exposer le contrôle onglet via le contrôle utilisateur afin que nous puissions ajouter des onglets?

Une option avant droite serait l'ajout d'une méthode public au contrôle de l'utilisateur:

public void AddTab(string header) 
{ 
    this.tabControl.Items.Add(header); 
} 

une autre option serait d'exposer la propriété Items sur le contrôle de l'utilisateur:

public ItemCollection Items 
{ 
    get { return this.tabControl.Items; } 
} 
0

Je vous fournis un échantillon pour ouvrir une page dans un contrôle onglet, j'espère que cela aide:

public void OpenTabForm(Page oPage) 
     { 
      try 
      { 
       Frame oFrame = new Frame(); 
       oFrame.Content = oPage; 

       TabItem myItem = new TabItem(); 

       myItem.Header = oPage.Name; //give the header text 
       myItem.Content = oFrame; 

       tbtabMain.Items.Add(myItem); 

       tbtabMain.SelectedItem = myItem; 
      } 
      catch (Exception ex) 
      { 
       //handle error 
      } 
     } 
Questions connexes