2010-08-19 6 views

Répondre

1

Qu'en est-:

<ScrollViewer IsTabStop="False" ... 
+0

C'est exactement ce que je l'ai fait, mais c'est pas pirater une solution. Le ScrollViewer, avec IsTabStop défini sur true, doit se comporter de manière à ce que la mise au point se fasse uniquement lorsque la barre de défilement est active. Je pense que ça doit être un bug. –

+0

Je ne suis pas sûr d'être d'accord. 'ScrollViewer' est un contrôle à part entière, que les barres de défilement (contrôles enfants) soient visibles ou non. Si vous souhaitez uniquement que le contrôle obtienne le focus lorsque ses barres de défilement sont visibles, vous pouvez simplement lier 'Focusable' de sorte qu'il soit' true' uniquement lorsque l'étendue dépasse la fenêtre d'affichage. –

+0

Le scrollviewer agissant comme un tabstop invisible lorsque les barres de défilement ne sont pas nécessaires me semble un comportement incorrect. Toute personne qui envisage d'interagir avec le clavier trouvera une clavette supplémentaire mystérieuse lors de la navigation à l'aide de la touche de tabulation. –

1

Il y a une solution simple, au moins dans Silverilght 4 et plus. Écoutez l'événement LayoutUpdated sur le ScrollViewer et définissez la propriété IsTabStop en fonction de l'état des barres de défilement.

Par exemple, si vous n'utilisez une barre de défilement vertical:

void myScrollViewer_LayoutUpdated(object sender, EventArgs e) 
{ 
    //this should only be a tabstop if the scrollbar is visible. 
    myScrollViewer.IsTabStop = 
     (myScrollViewer.ComputedVerticalScrollBarVisibility == Visibility.Visible); 
} 
Questions connexes