2010-06-07 13 views
9

Cuando uso la siguiente xaml en Silverlight 4, ScrollViewer no reconocerá la rueda del mouse a menos que haga clic una vez en la barra de desplazamiento y mantenga el mouse sobre la barra de desplazamiento, mientras gira la rueda del mouse.Cómo puedo hacer que la rueda del mouse funcione correctamente con Silverlight 4 ScrollViewer

<Grid x:Name="LayoutRoot" Background="White"> 
    <ScrollViewer> 
     <StackPanel Name="stackPanel1"> 
      <Button Content="Button 1" Width="150" /> 
      <Button Content="Button 2" Width="150" Margin="0,20,0,0" /> 
      <Button Content="Button 3" Width="150" Margin="0,20,0,0" /> 
      <Button Content="Button 4" Width="150" Margin="0,20,0,0" /> 
      <Button Content="Button 5" Width="150" Margin="0,20,0,0" /> 
      <Button Content="Button 6" Width="150" Margin="0,20,0,0" /> 
      <Button Content="Button 7" Width="150" Margin="0,20,0,0" /> 
     </StackPanel> 
    </ScrollViewer> 
</Grid> 

¿Alguien más ha experimentado esto, y hay algún trabajo?

Respuesta

17

La resolución aquí parece estar configurado un cepillo de fondo en la ScrollViewer. En mi caso, elegí usar el pincel Transparente. Parece estar relacionado con la prueba de impacto por la cual un control sin pincel nunca recibirá ningún evento de mouse.

<ScrollViewer Background="Transparent"> 
+0

+1: un nivel alfa del 0% (transparencia total) en un objeto Silverlight lo quita de Hit-Testing. Supongo que el color definido Transparent tiene un valor alfa justo por encima de 0. Normalmente solo establezco un color con un alfa del 1%, pero ahora intentaré con "Transparent". Cheers –

+0

+1 ¡Impresionante! ¡Qué solución más divertida/extraña! – gideon

+0

+1 Ahorro de vida. Estaba teniendo este problema exacto y no podía resolverlo. Funcionó cuando el control secundario del Visor de desplazamiento era un control personalizado (con un conjunto de fondo), pero cuando se trataba de un panel de pila sin un conjunto de fondo, estaba fallando. – Mmerrell

0

Instalar el kit de herramientas de Silverlight de aquí http://silverlight.codeplex.com/

Añadir referencia a la System.Windows.Controls.Navigation y System.Windows.Controls.Toolkit dlls

modificar el código para agregar la navegación espacio de nombres a la etiqueta de control de usuario, como se muestra a continuación

<UserControl x:Class="SilverlightApplication1.MainPage" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="400"> 

Envuelva su StackPanel en etiqueta de marco al igual que

<ScrollViewer x:Name="SV" > 
     <navigation:Frame> 
      <StackPanel Name="stackPanel1"> 
      <Button Content="Button 1" Width="150" /> 

En el código subyacente, agregue las siguientes líneas

public MainPage() 
    { 
     InitializeComponent(); 
     SV.SetIsMouseWheelScrollingEnabled(true); 

Referencia: http://diptimayapatra.wordpress.com/2009/12/08/mouse-wheel-scroll-for-scrollviewer-in-silverlight-3/

+0

SetIsMouseWheelScrollingEnabled funciona, pero solo cuando el ScrollViewer contiene un elemento de Marco. He intentado algunos otros elementos, pero ninguno de ellos parece funcionar con este truco. Si alguien está interesado en seguir esto, he registrado un informe de error de conexión en https://connect.microsoft.com/VisualStudio/feedback/details/565397/mouse-wheel-does-not-work-correctly-with-the-silverlight -4-scrollviewer –

+0

Si bien este truco funciona en tiempo de ejecución, no es compatible con los diseñadores VS2010 o Blend. Cuando se abre la vista en el diseñador, todo lo que verá es el texto "Marco", aunque restablecer la propiedad Contenido en Mezcla y hacer un deshacer volverá a hacer visible el contenido. –

Cuestiones relacionadas