2010-06-07 63 views
9

當我在Silverlight 4中使用以下xaml時,ScrollViewer將無法識別鼠標滾輪,除非我單擊滾動條拇指並保持鼠標在滾動條上,同時轉動鼠標滾輪。如何讓鼠標滾輪正常使用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> 

有沒有其他人遇到過這種情況,有沒有什麼解決辦法?

回答

17

分辨率在這裏似乎被設置在ScrollViewer中後臺刷。在我的情況下,我選擇使用透明畫筆。它似乎與命中測試有關,因爲沒有畫筆的控件永遠不會收到任何鼠標事件。

<ScrollViewer Background="Transparent"> 
+0

+1:Silverlight對象上0%(完全透明)的alpha級別將其從命中測試中取出。我猜測定義的顏色Transparent的alpha值剛好在0以上。我通常只設置1%alpha的顏色,但現在會嘗試使用「Transparent」。乾杯 – 2010-09-11 06:01:17

+0

+1太棒了!儘管有趣/奇怪的解決方案! – gideon 2010-11-24 18:56:48

+0

+1生命拯救者。有這個確切的問題,並不能解決它。當ScrollViewer的子控件是一個自定義控件(使用背景設置)時它工作,但當它是沒有背景設置的堆棧面板時,它失敗了。 – Mmerrell 2011-02-10 15:36:31

0

從這裏http://silverlight.codeplex.com/

安裝Silverlight工具包添加參考System.Windows.Controls.NavigationSystem.Windows.Controls.Toolkit的dll

修改代碼以添加導航命名空間到UserControl標記,如下所示

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

將您的StackPanel包裹在框架標記中,如下所示

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

在後面的代碼,添加以下代碼行

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

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

+0

SetIsMouseWheelScrollingEnabled的作品,但只有當ScrollViewer包含一個框架元素。我已經嘗試了其他一些元素,但他們中的任何一個似乎都不適合這種黑客行爲。如果有人對此感興趣,我已經在https://connect.microsoft.com/VisualStudio/feedback/details/565397/mouse-wheel-does-not-work-correctly-with-the-silverlight上記錄了一個連接錯誤報告-4-scrollviewer – 2010-06-08 03:42:35

+0

雖然這個黑客在運行時工作,但它不受VS2010或Blend設計人員的支持。在設計器中打開視圖時,您將看到的是文本「Frame」,但重置Blend中的Content屬性並執行撤消操作會使內容再次顯示。 – 2010-06-08 07:43:34

相關問題