2009-05-12 13 views
0

Je voudrais avoir un canevas qui supporte l'événement DragDelta. Ma première idée de comment faire ceci était de faire un ControlTemplate qui inclut un pouce. Mais je ne sais pas comment le faire correctement. Comment puis-je modifier le code XAML ci-dessous pour le compiler et quelle est la bonne façon d'installer le gestionnaire d'événements DragDelta?WPF: Comment installer le comportement du pouce dans un canevas?

<UserControl.Resources> 
    <ControlTemplate x:Key="Transparent"> 
     <Rectangle Fill="Transparent"/> 
    </ControlTemplate> 
    <ControlTemplate x:Key="ThumbCanvas" TargetType="{x:Type Canvas}"> 
     <Grid> 
      <Thumb x:Name="CanvasThumb" Template="{StaticResource Transparent}" DragDelta="CanvasThumb_DragDelta"/> 
      <ContentPresenter Content="{TemplateBinding Content}"/> 
      <!--error MC3011: Cannot find the static member 'ContentProperty' on the type 'Canvas'.--> 
     </Grid> 
    </ControlTemplate> 
</UserControl.Resources> 

Répondre

1

Tout contrôle dérivé de panneau n'a pas de propriété de modèle, car ils n'ont pas de composants visibles.

Vous pouvez utiliser le contrôle Thumb dans le UserControl, comme vous le faites, et ajuster simplement la hauteur/largeur du UserControl en fonction du delta du Thumb. Pour que cela fonctionne correctement, vous devez obtenir l'emplacement de la souris par rapport au parent de la commande usercontrol, sinon cela ne fonctionnera pas bien. c'est-à-dire: e.GetLocation (this.Parent);

Vous devriez également dimensionner la hauteur/largeur de ce pouce. C'est une bonne idée de placer le curseur dessus aussi.

+0

J'ai supposé que si j'avais simplement un pouce sous la toile que la toile obtiendrait l'événement de la souris et non le pouce. Non? BTW, je ne vais pas utiliser le pouce pour le redimensionnement, mais simplement pour faire la distinction entre cliquer et faire glisser sur la toile. – Qwertie

+0

Il s'avère que Canvas ne reçoit pas les événements de la souris (et ils passent à travers) si elle ne reçoit pas de valeur pour l'arrière-plan. Malheureusement, les événements MouseDown, MouseUp, MouseMove standard ne fonctionnent pas correctement pour moi lorsque j'attache des gestionnaires au Thumb ... – Qwertie

+0

Mise à jour: Lorsque j'attache des événements à un Thumb, je dois gérer PreviewMouseDown et PreviewMouseMove au lieu de MouseDown et MouseMove, comme le pouce bloque les événements réguliers. – Qwertie