Considérese primero versión de código (MainWindow.xaml):Al utilizar ScrollViewer como parte de plantilla para un cierto control, el botón izquierdo se maneja
<ScrollViewer>
<local:CustomControl1 Width="1000" Height="1000" Background="Red"/>
</ScrollViewer>
donde CustomControl1 deriva de ItemsControl. Dentro de CustomControl1, sobreescribo el evento OnMouseDown. Este código funciona perfectamente, y atrapo el evento de mouse down.
Ahora segunda versión de código (MainWindow.xaml):
<local:CustomControl1 Width="1000" Height="1000" Background="Red"/>
Dentro Generic.xaml, que el cambio de plantilla de mis elementos de control:
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer
VerticalScrollBarVisibility="Visible"
HorizontalScrollBarVisibility="Visible"
>
<ItemsPresenter/>
</ScrollViewer>
</Border>
</ControlTemplate>
Cuando poniendo ScrollViewer como parte del control plantilla, NO recibo OnMouseDownEvent más (para clic izquierdo). Por algún motivo, ahora el evento del mouse marcado como manejado. Si en lugar de anular OnMouseDown I utilizando la siguiente declaración en el interior elementos controlan constructor, el evento es apresado:
AddHandler(Mouse.MouseDownEvent, new MouseButtonEventHandler(OnMouseDown), true);
En primer lugar, me gustaría entender por qué la colocación en el interior ScrollViewer plantilla de cambiar el comportamiento de ratón. En segundo lugar, ¿alguien sabe alguna solución? La solución que propuse (mediante la captura de eventos manejados) no es aceptable para mí. En mi aplicación, necesito manejar eventos de mouse solo si ninguno de los elementos controlan que los niños lo manejen.
Gracias de antemano.
¡Buena captura, muchas gracias! – Illidan
No entiendo. ¿Cómo funciona el manejo de eventos con enfoque = falso afecto? –