私の勝利の電話7アプリでは、リストボックスで垂直スクロールを無効にしたいと考えています。しかし、私が使用するときスクロールを無効にするとスクロール位置を保持する方法
listbox.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
リストボックスが一番上にスクロールします。スクロールを無効にしているときにスクロール位置を保持するにはどうすればよいですか?
編集:私はリストボックスがそれらを処理する前にイベントを飲み込むことによってスクロールを無効にすることを考えています。しかし、私がManipulationStartedとManipulationCompletedを処理しようとすると、例外があります。リストボックスにスクロールできないイベントは何ですか?
at Microsoft.Phone.Gestures.GestureHelper.ReleaseMouseCaptureAtGestureOrigin()
at Microsoft.Phone.Gestures.GestureHelper.NotifyMove(InputDeltaArgs args)
at Microsoft.Phone.Gestures.ManipulationGestureHelper.Target_ManipulationDelta(Object sender, ManipulationDeltaEventArgs e)
at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)
at Microsoft.Xna.Framework.Input.UnsafeNativeMethods.CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
at Microsoft.Xna.Framework.Input.SafeNativeMethods.CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
at Microsoft.Xna.Framework.Input.WindowMessageHooker.Hook.WndProc(IntPtr msgWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
編集:私のコードで処理として、私はManipulationStarted、ManipulationDeltaとManipulationCompletedをマークすると は、私はこのスタックトレースとヌル例外を持っている私は、私は無効にスクロールをしたいと、デフォルトのリストボックスが動作することを発見しました。しかし、私のリストボックスには、UI仮想化を無効にするItemPresenterを持つスタックを持つカスタムテンプレートがあります。このシナリオでは、スクロールを無効にすると、リストボックスが自動的に上にスクロールします。
編集:ここでは、リストボックスのテンプレートです:
<phone:PhoneApplicationPage.Resources>
<Style x:Key="ListBoxStyle1" TargetType="ListBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}">
<StackPanel Orientation="Vertical" Width="468">
<ItemsPresenter d:LayoutOverrides="Width"/>
</StackPanel>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</phone:PhoneApplicationPage.Resources>
およびXAML:のGotFocusとLOSTFOCUS機能で
<ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="MainListBox_SelectionChanged" Style="{StaticResource ListBoxStyle1}" GotFocus="gotfocus" LostFocus="lostfocus">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
、私は無効にして、それぞれのスクロール可能。このリストボックスは、デフォルトのデータバインドされたアプリケーションからのものです。下にスクロールして1つの項目をクリックすると、リストボックスが上にスクロールします。 ItemPresenterを保持するためにスタックを使用していないときは発生しません。
リストボックスのXAMLを表示できますか? – keyboardP
はい、私は質問を更新しました=) –