2010-06-07 10 views
9

Quando utilizzo il seguente xaml in Silverlight 4, ScrollViewer non riconosce la rotella del mouse a meno che non clicchi una volta sul pollice della barra di scorrimento e tenga il mouse sopra la barra di scorrimento, mentre si gira la rotellina del mouse.Come posso far funzionare correttamente la rotella del mouse con SilverView 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> 

Qualcun altro ha esperienza di questo e ci sono dei problemi?

risposta

17

La risoluzione qui sembra essere impostato un pennello di sfondo sul ScrollViewer. Nel mio caso ho scelto di usare il pennello trasparente. Sembra essere correlato al test di successo in base al quale un controllo senza un pennello non riceverà mai alcun evento del mouse.

<ScrollViewer Background="Transparent"> 
+0

+1: un livello alfa dello 0% (trasparenza completa) su un oggetto Silverlight lo toglie dal test dei colpi. Sto indovinando il colore definito Trasparente ha un valore alfa appena sopra lo zero. Normalmente ho appena impostato un colore con un alfa dell'1%, ma ora proveremo "Trasparente". Saluti –

+0

+1 Fantastico! Che soluzione divertente/dispari però! – gideon

+0

+1 Risparmio di vita. Stava avendo questo problema esatto e non riuscivo a capirlo. Funzionava quando il controllo figlio di Scroll Viewer era un controllo personalizzato (con un set di sfondo) ma quando era un pannello dello stack senza un set di sfondo stava fallendo. – Mmerrell

0

installare il toolkit di Silverlight da qui http://silverlight.codeplex.com/

Aggiungere riferimento alla System.Windows.Controls.Navigation e System.Windows.Controls.Toolkit DLL

Modificare il codice per aggiungere la navigazione namespace al tag UserControl come mostrato sotto

<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"> 

Avvolgi il tuo StackPanel nel tag del telaio in modo tale

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

nel codice dietro, aggiungere le seguenti righe

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

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

+0

SetIsMouseWheelScrollingEnabled funziona, ma solo quando ScrollViewer contiene un elemento Frame. Ho provato alcuni altri elementi, ma nessuno di loro sembra funzionare con questo trucco. Se qualcuno è interessato a seguire questo ho registrato un bug report di connessione su https://connect.microsoft.com/VisualStudio/feedback/details/565397/mouse-wheel-does-not-work-correctly-with-the-silverlight -4-scrollviewer –

+0

Mentre questo hack funziona in fase di esecuzione non è supportato dai designer VS2010 o Blend. Quando la vista è aperta nel designer, tutto ciò che vedrai è il testo "Frame", anche se reimpostando la proprietà Content in Blend e facendo un undo renderà nuovamente visibile il contenuto. –

Problemi correlati