5

リストボックスでスクロールビューアを使用している場合、タッチスクロールでリストボックスの最後に到達すると、ウィンドウ全体が跳ね返ります。マウス ホイールを使用すると、この動作は発生しません。このオーバースクロール/ラバーバンド効果/スナップバック効果/バウンス効果を無効にするにはどうすればよいですか?

Windows 8 コンピューターで .NET Framework 4.5 を使用しています。

このビデオでバウンス効果を見ることができます: http://www.vidup.de/v/gQ2pI/

これが私のコード例です:

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

1 に答える 1

5

OnManipulationBoundaryFeedback メソッドをオーバーライドすることで、この動作を削除できます。

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

もう 1 つの解決策は、次のハンドラーをManipulationBoundaryFeedbackイベントに追加することです (ListBox に直接、またはスタイルを介して)。

<ListBox ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback"/>

または:

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

次のコードビハインドを使用:

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

これらのメソッドは、ScrollViewer でも機能します。

于 2013-06-24T16:15:55.730 に答える