2013-05-31 19 views
5

Khi tôi đang sử dụng một trình xem ảnh trong hộp danh sách, toàn bộ cửa sổ của tôi bị nảy khi tôi đến cuối hộp danh sách qua chạm vào cuộn. Hành vi này không xuất hiện khi tôi sử dụng bánh xe chuột của mình. Làm thế nào tôi có thể vô hiệu hóa hiệu ứng overscrolling/rubber-band-effect/snap-back-effect/bouncing này.xaml Scrollviewer - Vô hiệu hóa việc ghi đè/hiệu ứng dải cao su/hiệu ứng snapback/bouncing toàn bộ cửa sổ

Tôi đang làm việc với .NET Framework 4.5 trên máy tính chạy Windows 8.

Bạn có thể nhìn thấy hiệu quả trả về video này: http://www.vidup.de/v/gQ2pI/

Đây là mã ví dụ của tôi:

<Window x:Class="style_test_for_scrollviewer.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 

    <Grid> 
     <ListBox Width="200"> 
      <WrapPanel Width="200"  ScrollViewer.PanningMode="VerticalOnly"   ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
       <Button Height="200" Width="200"></Button> 
     </WrapPanel> 
     </ListBox> 
    </Grid> 
</Window> 

Trả lời

4

Bạn có thể loại bỏ hành vi này bằng cách ghi đè các phương pháp OnManipulationBoundaryFeedback:

public class FixedListBox : ListBox 
{ 
    protected override void OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs e) 
    { 
     e.Handled = true; 
    } 
} 

Một giải pháp khác là thêm trình xử lý sau vào sự kiện ManipulationBoundaryFeedback (trực tiếp trên ListBox hoặc thông qua một kiểu):

<ListBox ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback"/> 

Hoặc:

<Style TargetType="{x:Type ListBox}"> 
    <EventSetter Event="ManipulationBoundaryFeedback" Handler="OnManipulationBoundaryFeedback"/> 
</Style> 

Với đoạn mã sau đằng sau:

protected void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) 
{ 
    e.Handled = true; 
} 

Những phương pháp làm việc với ScrollViewer quá.

Các vấn đề liên quan