WPF ToolBar: comment supprimer l’adhérence et le débordement

Dans un ToolBarPanel-ToolBar-Menu de WPF nested, nous voulons supprimer la poignée à gauche et la zone de débordement à droite. ils sont tous les deux grisés, mais nous aimerions qu’ils ne soient pas affichés du tout.

des idées sur la façon d’accomplir cela?

au cas où mes termes ne seraient pas tout à fait corrects, si vous regardez l’image de la figure 3 du lien ci-dessous, sur la plus basse des trois barres d’outils, il y a la poignée à gauche de la liste déroulante et à droite bouton il y a le débordement.

Image des barres d’outils

La poignée peut être supprimée en définissant la propriété attachée ToolBarTray.IsLocked="True" sur la ToolBarTray.IsLocked="True" .

Pour supprimer le débordement ToggleButton , vous devrez le supprimer dans un ControlTemplate personnalisé, comme le suggèrent les sixlettervariables, qui, si vous avez mélangé ou pouvez télécharger l’aperçu Blend 3, n’est pas trop difficile.

Vous pouvez également simplement masquer le bouton dans l’événement chargé du ToolBar, même si vous choisissez l’itinéraire, vous devez également définir la propriété attachée ToolBar.OverflowMode="Never" dans le menu de la ToolBar.OverflowMode="Never" , afin que les éléments ne puissent pas déborder accidentellement dans une zone inaccessible .

         

Et définissez le débordement ToggleButton sur réduit:

 private void ToolBar_Loaded(object sender, RoutedEventArgs e) { ToolBar toolBar = sender as ToolBar; var overflowGrid = toolBar.Template.FindName("OverflowGrid", toolBar) as FrameworkElement; if (overflowGrid != null) { overflowGrid.Visibility = Visibility.Collapsed; } var mainPanelBorder = toolBar.Template.FindName("MainPanelBorder", toolBar) as FrameworkElement; if (mainPanelBorder != null) { mainPanelBorder.Margin = new Thickness(); } } 

Vous pouvez utiliser Blend pour remplacer simplement le ControlTemplate pour ToolBarPanel, Menu ou ToolBar.

  1. Faites un clic droit sur la barre d’outils et sélectionnez Modifier le modèle
  2. Dans Modifier le modèle, sélectionnez Modifier une copie
  3. Je recommande d’append la copie à un dictionnaire de ressources
  4. Cliquez sur OK

Vous allez maintenant éditer le modèle de contrôle pour ToolBarPanel et définir la visibilité sur Réduit pour le signal d’adhérence et de dépassement. Vous pouvez rincer et répéter pour les autres contrôles. C’est un peu long, mais pas très difficile avec Blend.

Vous pouvez “supprimer” le débordement sans fournir un nouveau modèle de contrôle en définissant la ToolBar d’ ToolBar sur des marges droites négatives (et en plaçant une marge gauche négative pour qu’elle ne soit pas bizarre avec des bords gauches arrondis mais des bords droits carrés). Ensuite, ajoutez ClipToBounds="True" au ToolBarPanel qui coupera les bords de la barre d’outils qui sont maintenant en dehors de la zone du panneau.

   . . . 

Plutôt que de cacher complètement le bouton de débordement, je pense qu’il vaut mieux le montrer uniquement lorsque cela est nécessaire. Cela peut être fait en liant sa propriété Visibility à sa propriété IsEnabled :

 private static void FixupToolBarOverflowArrow(ToolBar toolBar) { Action fixup = () => { var overflowButton = toolBar.Template.FindName("OverflowButton", toolBar) as ButtonBase; if (overflowButton != null) { overflowButton.SetBinding( VisibilityProperty, new Binding("IsEnabled") { RelativeSource = RelativeSource.Self, Converter = new BooleanToVisibilityConverter() }); } }; if (toolBar.IsLoaded) { fixup(); } else { RoutedEventHandler handler = null; handler = (sender, e) => { fixup(); toolBar.Loaded -= handler; }; toolBar.Loaded += handler; } } 

(la même chose peut être faite dans XAML en redéfinissant le modèle)

Je ne fais que commencer avec WPF et je ne pouvais obtenir aucune des méthodes ci-dessus pour cacher ma flèche de débordement (Visual Studio 2010). La seule chose qui semblait affecter la flèche était l’exemple Toolbar_Load ci-dessus mais tout ce qui a été fait un espace vide qui avait l’air aussi mauvais que la flèche. Le plus simple était de définir les marges de la barre d’outils.

  Margin="0,0,-13,0">       

Les méthodes ci-dessus fonctionnent pour masquer le débordement; J’ai utilisé ce qui suit pour cacher la pince:

   

pour une disposition horizontale, et

   

pour une disposition verticale. Placez ce qui précède après la barre d’outils (ou ToolbarTray, si vous l’utilisez)

Utilisez n’importe quelle largeur et hauteur pour vos boutons.

Kaxaml est excellent pour jouer avec ce genre de choses.