2011-11-19 3 views
1

WPF에서 응용 프로그램을 구축 중입니다. 복잡한 배경 (3000 개의 직사각형을 포함하는 Canvas)과 그 위에 5 개의 버튼으로 구성됩니다. "Focusable"및 "HitVisible"요소는 다섯 개의 버튼입니다. 탭 타겟팅을 사용하여 마지막 요소를 집중시키는 경우 탭을 누르고 첫 번째 요소를 다시 포커스하는 데 상당한 지연이있는 문제가 있습니다. 내 배경을 삭제하지 않고 할 수있는 일이 있습니까?키보드 포커스 지연

for (int i = 0; i < max; ++i) 
{ 
    Rectangle rectangle = new Rectangle(); 

    rectangle.Width = 60; 
    rectangle.Height = 60; 
    rectangle.Fill = new SolidColorBrush (Color.FromArgb 
     ((byte) random.Next (0, 12), 255, 255, 255)); 

    Canvas.SetLeft (rectangle, x * 30 - 5); 
    Canvas.SetTop (rectangle, y * 30 - 5); 

    uiCanvasBackground.Children.Add (rectangle); 
} 
+0

몇 가지 예제 코드를 보여주십시오

이 위대한 문서에서는 효율적인 ItemsControl을 구현할 수있는 방법을 설명합니다. – Fischermaen

+0

질문이 코드로 편집되었습니다. – Dave

답변

0

System.Windows.Media.DrawingVisual 개체와 같은 좀 더 가벼운 개체를 만들고 드로잉 컨텍스트에서 사각형을 그립니다. 이들은 ItemsControl 역할을하는 Framework 요소에서 호스팅됩니다. 당신이 포커스를 취득하지 않아야하는 3000 개 사각형 중 하나를 생성하는 방법을 Writing More Efficient ItemsControls

0

난 당신의 코드에 두 줄을 추가 한 나는 그 문제가 해결되기를 바랍니다 :이 다음 캔버스에 부착 된 KeyboardNavigation.TabNavigation을 설정하려고 탭 이동과 관련되어있는 경우

for (int i = 0; i < max; ++i) 
{ 
    Rectangle rectangle = new Rectangle(); 

    rectangle.Width = 60; 
    rectangle.Height = 60; 

    // I added the following two lines 
    rectangle.Focusable = false; 
    rectangle.SetValue(KeyboardNavigation.IsTabStopProperty, false); 
    rectangle.Fill = new SolidColorBrush(Color.FromArgb((byte)random.Next(0, 12), 255, 255, 255)); 

    Canvas.SetLeft(rectangle, x * 30 - 5); 
    Canvas.SetTop(rectangle, y * 30 - 5); 

    uiCanvasBackground.Children.Add(rectangle); 
} 
+0

아니, 불행히도. 가시성을 숨겨진 작품으로 설정하는 것은 이상합니다. 바라기를 나는 또 다른 대안을 찾을 수 있습니다. – Dave

+0

당신은 한 가지 형태로 3000 개의 컨트롤을 가지고 있다고 말했습니까? 그건 꽤 많이 맞지? 따라서 KeyboardNavigation Handler가 포커스를 얻기 위해 다음 유효한 컨트롤을 검색해야하는 경우 많은 시간이 필요합니다. 어쩌면 당신은 LostFocus 이벤트, 또는 가능한 경우 더 좋은 방법이 될 수 있습니다. 포커스가있는 컨트롤의 keydown 이벤트에서 Tab 키를 누른 상태에서 다음 올바른 컨트롤로 직접 포커스를 설정하고 이벤트를 처리 된 것으로 설정하십시오. – Fischermaen

0

을 to None으로 설정하면 탭 정지를 평가할 때 프레임 워크가 Canvas와 그 자손을 건너 뜁니다.

+0

그럼이 기능이 도움이 되었습니까? – AndrewS

관련 문제