8
votes

Augmenter le seuil de saisie de la souris de la souris de la souris WPF

est-il possible d'augmenter la distance d'un séparateur de grille à partir de laquelle l'utilisateur peut l'attraper?

Mon séparateur n'est que 1px en largeur. J'aimerais pouvoir attraper le séparateur d'une plus grande distance.

Comme il est maintenant, je dois pointer la souris sur la ligne exacte de 1px pour la saisir.

et le séparateur doit toujours être 1px en largeur


0 commentaires

3 Réponses :


17
votes

Vous pouvez modifier la taille réelle du Gridsplitter tout en le gardant comme il est plus petit. Cela vous donnera une zone de largeur de 7 pixels pour l'attraper tout en montrant à 1 pixel: xxx

L'exemple utilise la méthode consistant à donner au séparateur sa propre colonne, mais le même principe s'applique s'il reste ou à droite aligné dans une colonne partagée.


5 commentaires

Ceci est correct, mais je devais changer le zindex de la grille de la grille, car ce côté droit a été caché par un dockpanel.


Quel est le but de margin = "- 3,0"? Vous voulez que le séparateur horizontal est aligné dans la zone de 7 pixels au lieu de centré?


Les marges négatives créent l'espace supplémentaire de chaque côté pour la bordure transparente 3 px pour remplir la mise en page. Sans que le séparateur ne dispose que de la colonne 1 px pour rendre.


Il convient également de noter que borgnebrush = "transparent" est la clé. Si vous le laissez comme la valeur par défaut ( pas de brosse ), cela ne fonctionne pas.


Pour clarifier le commentaire de @ Eriktj: vous devez placer le gredipsplitter après les autres éléments de la grille (inférieur dans le code source), il ne sera donc pas couvert par eux.



2
votes

Je n'ai pas pu obtenir la solution de John Bowen au travail. Cela semblait avoir fonctionné, mais il semblait que le séparateur n'avait que 1 pixel d'espace grab.

J'ai fini par faire cela: P>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Stackpanel Grid.Row="0"/>
    <GridSplitter
        Grid.Row="1"
        HorizontalAlignment="Stretch"
        BorderBrush="DarkGray"
        Height="6"
        Background="Transparent"
        BorderThickness="0,1,0,0"
        Margin="0,0,0,-4"/>
    <Stackpanel Grid.Row="2"/>
</Grid>


1 commentaires

Le problème avec cette technique est qu'il met la ligne grise en haut de la zone de 6 pixels où vous pouvez saisir la ligne grise. Êtes-vous sûr de ne pas oublier simplement de retourner des valeurs dans votre traduction de la réponse de John de Vertical à Horizontal? Cela a fonctionné pour moi (zone de 5 pixels à saisir, ligne grise dans le centre de la zone):



3
votes

Je sais que c'est une question antique, mais je pensais ajouter ma réponse quand même. Après beaucoup d'expériences, il semble que ce qui suit semble fonctionner parfaitement pour un Gridsplitter xxx

testé avec le code suivant: xxx < / Pré>

Sans le modèle, la "zone saisissante de la souris" est de 1 pixel. Mais défini comme ci-dessus avec le gabarit, il est augmenté à 7 pixels qui est à peu près correct. Le même code peut être ajusté pour une ligne de largeur de pixels de 2 ou plus, en modifiant le textblock largeur , bord de la bordure et largeur de colonne . Vous pouvez rendre la souris grab ridiculement énorme mais le problème est que l'augmentation n'est que sur le côté gauche; Ce n'est pas centré sur la ligne, qui devient plus remarquable, plus vous l'augmentez. Mais pour une ligne étroite, c'est un moyen facile d'augmenter la prise de la souris à quelque chose d'utilisable.

J'utilise 2 pixels largeur gridsplitters et utilisez un style pour définir Ismousever propriétés et telle: xxx

Important: la largeur doit être réglée sur 3 ou 4 dans ce cas de 2 Ligne de largeur de pixel.


0 commentaires