C# | WPF - la personnalisation de la Barre de Titre - faites Glisser la fenêtre à partir de haut lorsque agrandie ne marche pas
J'ai personnalisé la barre de titre et avec le style de la fenêtre définie sur none. Sur le clic sur la barre de titre-je vérifier pour voir si c'est un double-clic (qui n'fenêtre agrandir et restaurer) si elle n'est pas un double-clique, je ne Window.DragMove
. Cela fonctionne très bien pour l'adhérence sur le côté et sur le dessus. Mais quand j'ai essayer de faire glisser la fenêtre lorsqu'elle est agrandie (ce qui serait normalement restaurer la fenêtre vers le bas), il ne fait rien. Voici mon code:
static Window Window { get { return Application.Current.MainWindow; } }
///<summary>
///TitleBar_MouseDown - Drag if single-click, resize if double-click
///</summary>
private static void TitleBar_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
if (e.ClickCount == 2)
{
AdjustWindowSize();
}
else
{
Window.DragMove();//Here is where I do the drag move
}
}
}
///<summary>
///Adjusts the WindowSize to correct parameters when Maximize button is clicked
///</summary>
internal static void AdjustWindowSize()
{
if (Window.WindowState == WindowState.Maximized)
{
SystemCommands.RestoreWindow(Window);
}
else
{
SystemCommands.MaximizeWindow(Window);
}
}
#region Button Events
///<summary>
///CloseButton_Clicked
///</summary>
public static void Close()
{
SystemCommands.CloseWindow(Window);
}
///<summary>
///MaximizedButton_Clicked
///</summary>
public static void Maximize()
{
AdjustWindowSize();
}
///<summary>
///Minimized Button_Clicked
///</summary>
public static void Minimize()
{
SystemCommands.MinimizeWindow(Window);
}
#endregion
INTERFACE moderne et MahApps.Le métro est-il en quelque sorte et j'ai regardé le code source brièvement, mais ne pouvait pas trouver comment ils le font.
Merci d'avance.
OriginalL'auteur James Esh | 2014-07-09
Vous devez vous connecter pour publier un commentaire.
Je suis en mesure d'obtenir le comportement souhaité de la barre de titre, y compris aero snap dans le plus pur xaml
comme résultat, vous pouvez voir une coutume de la barre de titre, il est totalement déplacé, double-cliquez pour l'agrandir et restaurer et faites glisser et retirez la.
xaml
résultat
alors maintenant, vous n'avez pas besoin de tout le code derrière la poignée de la barre de titre manuellement.
Réutilisables styles
vous pouvez également envelopper ci-dessus dans un style personnalisé que vous pouvez appliquer sur plusieurs fenêtres
utilisation
How to implement in your code
Après avoir regardé ton code, j'ai réussi à la mettre en œuvre avec très peu de changements
Changements sont
Fichier:
CustomChrome.cs
ligne 41: changement
CaptionHeight = 36
, actuellement elle est de 0. cela doit être égal à la barre de titre de la hauteurla ligne 60: supprimer
((FrameworkElement)sender).MouseDown += TitleBar_MouseDown;
de ne pas requiseligne 70: supprimer n'est plus utilisé événement
TitleBar_MouseDown
Fichier:
CornerButtons.xaml
ligne 13: ajouter
WindowChrome.IsHitTestVisibleInChrome="True"
àStackPanel
Fichier:
MainWindow.xaml
ligne 17: ajouter
WindowChrome.IsHitTestVisibleInChrome="True"
àStackPanel
c'est tout, et votre application normale de la barre de titre, sans avoir à gérer une logique personnalisée
pourriez-vous poster un exemple de travail de votre application? je l'essayer ici.
savez-vous comment faire?
Si vous voulez savoir comment post puis il suffit de compresser les fichiers de code et de télécharger un fichier de partage de site, puis de poster le lien ici. Si vous regardez regarder de l'avant pour le code, je peut donner un coup de feu.
avez-vous mis
WindowChrome.IsHitTestVisibleInChrome="True"
, ce qui est nécessaire pour ceux qui touche au travail. vous pouvez définir individuellement pour les boutons.OriginalL'auteur pushpraj