2013-07-22 5 views
0

Canvas에있는 AdornerUIElement에 연결하는 다음 코드가 있습니다. 나는 RichTextBox으로 프로그램이 충돌 런타임 동안 RichTextBox 클릭하지만 어떤 이유 WPF richTextBox는 UIElement로 식별 할 수 없습니다.

private void slideCanvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    { 
       selected = false; 
       if (selectedElement != null) 
       { 
        aLayer.Remove(aLayer.GetAdorners(selectedElement)[0]); 
        selectedElement = null; 
       } 
      } 

      if (e.Source != slideCanvas) 
      { 
       _isDown = true; 
       _startPoint = e.GetPosition(slideCanvas); 

       selectedElement = e.Source as UIElement; 

       _originalLeft = Canvas.GetLeft(selectedElement); 
       _originalTop = Canvas.GetTop(selectedElement); 

       aLayer = AdornerLayer.GetAdornerLayer(selectedElement); 
       aLayer.Add(new ResizingAdorner(selectedElement)); 
       selected = true; 
       e.Handled = true; 
      } 
} 

UIElemente.Source에 의해 찾을 수 없습니다.

selectedElement은 단지 null입니다.

아무도 내게 이유를 말해 주시고 제발 해결할 수 없습니까?

+0

'e.Source'가 실제로 무엇인지 확인하려면 해당 행에 중단 점을 설정할 수 있습니다. RichTextBox 내부의 문서 요소 중 하나 일 수 있습니다. – Clemens

+0

e.Source는 {System.Windows.Documents.FlowDocument}입니다. 그게 무슨 뜻인지 모르겠다. – kev3kev3

답변

1

분명히 e.Source은 클릭 한 RichTextBox의 Document입니다. 에서 파생되지 않은 FlowDocument입니다.

그러나 RichTextBox에 FlowDocument의 Parent 속성으로 액세스 할 수 있습니다.

if (e.Source is FlowDocument) 
{ 
    selectedElement = ((FlowDocument)e.Source).Parent as UIElement; 
} 
else 
{ 
    selectedElement = e.Source as UIElement; 
} 
+0

환상적입니다. 감사합니다. 이제 RichTextBox를 클릭하고 이동하고 크기를 조정할 수 있지만 실제로는 아무 것도 입력 할 수 없습니다. 캔버스에서 크기를 조절하고 컨트롤을 이동하는 데 아도 네이터를 연결하고 있습니다. RichTextBox에 아무 것도 입력 할 수 없으면 내 previewLeftMouseButtonDown 이벤트가 실행됩니까? – kev3kev3

+0

예, 그렇게 생각합니다. Tab 키를 사용하여 키보드로 포커스를 이동할 때를 제외하고. 당신의 adorner가 입력 포커스를 표시하기위한 것이라면, [GotFocus] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.gotfocus.aspx)와 [LostFocus] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.lostfocus.aspx) 이벤트. 또는 Got/LostKeyboardFocus. – Clemens

관련 문제