2011-04-07 2 views
2

다음과 같은 문제가 있습니다. 캔버스의 항목을 선택하면 (지울 때) scrollviewer는 항상 0으로 재설정됩니다. 이는 예제 코드의 초점 때문입니다. 초점()가 제거 된 경우에서 ScrollViewer는 좋아하지만, 선택한 항목을 지금 삭제할 수 없습니다>WPF : 캔버스 스크롤 뷰어 재설정 안 함

Mainwindow.Xaml 코드 :!

<Border Grid.Row="1" BorderThickness="1" BorderBrush="Navy" Margin="2" Padding="2" > 
       <ScrollViewer Name="Posizione_scrollbar" HorizontalScrollBarVisibility="Auto" 
          VerticalScrollBarVisibility="Auto"> 


Protected Overrides Sub OnPreviewMouseDown(ByVal e As System.Windows.Input.MouseButtonEventArgs) 
     MyBase.OnPreviewMouseDown(e) 

     ' usual selection business 
     Dim designer As DesignerCanvas = TryCast(VisualTreeHelper.GetParent(Me), DesignerCanvas) 
     If designer IsNot Nothing Then 
      If (Keyboard.Modifiers And (ModifierKeys.Shift Or ModifierKeys.Control)) <> ModifierKeys.None Then 
       If Me.IsSelected Then 
        designer.SelectionService.RemoveFromSelection(Me) 
       Else 
        designer.SelectionService.AddToSelection(Me) 
       End If 
      ElseIf Not Me.IsSelected Then 
       If MainViewModel.Instance.ActiveDiagram.STMonitor = False Then 
        designer.SelectionService.SelectItem(Me) 
       End If 
      End If 

      'Here is the problem: the canvas scrollbar is resetted to 0! 
      Me.Focus() 

     End If 

     'True per avere la gestione col tasto sinistro del mouse 
     e.Handled = True 

    End Sub 

답변

2

당신은 RequestBringIntoView 이벤트가 때 발생 처리하기 위해 시도해야 이 항목은 포커스를 받고이 이벤트가 ScrollViewer로 버블 링되지 않도록합니다. 이러한 이벤트를 처리 된 것으로 표시하는 좋은 장소는 캔버스 수준입니다.

+0

신난다, 이것은 정확히 내가 필요로했던 +1이었다. 캔버스 'RequestBringIntoView'에서'e.Handled = true'를 제안대로 설정하면 완벽하게 작동합니다. – RobJohnson

관련 문제