2013-05-17 6 views
0

실패합니다.Mouse.Capture 내가 창을 표시하고 전화 false를 반환 및 WPF에서 모달 대화 상자를 시뮬레이트하기 위해

Mouse.Capturednull입니다. dialogBoxArea.VisibilityVisibility.Visible입니다. dialogBoxArea.IsEnabledtrue입니다.

회선을 다시 호출하면 true을 반환하고 올바르게 마우스를 캡처합니다.

캡쳐가 작동하지 않는 것은 어떤 조건입니까?

편집

는 여기에 지금까지 시도했습니다거야.

 if (Mouse.Captured != null) 
     { 
      // Not called, so presumably, nothing has already captured the mouse 
      MessageBox.Show("already captured"); 
     } 

     if (dialogBoxArea.Visibility != Visibility.Visible) 
     { 
      // Not called 
      MessageBox.Show("not visible"); 
     } 

     if (!dialogBoxArea.IsEnabled) 
     { 
      // Not called 
      MessageBox.Show("not enabled"); 
     } 

     // According to documentation, this should release mouse capture from anything that holds it 
     Mouse.Capture(null); 

     // Attempt to capture the mouse 
     if (!Mouse.Capture(dialogBox, CaptureMode.SubTree)) 
     { 
      // This is called 
      Mouse.Capture(null); 
      Mouse.Capture(dialogBox, CaptureMode.SubTree); 
     } 
+0

아마도 마우스가 이미 다른 것으로 캡처 된 것일 수 있습니다. 어떻게 부르니? –

+0

NET 소스 코드를 설치 한 다음 Mouse.Capture로 추적 할 수 있습니다. http://weblogs.asp.net/rajbk/archive/2010/04/21/setting-up-visual-studio-2010-to-step-into-microsoft-net-source-code.aspx .... 또는 소스 코드를보고 시각적으로 확인하십시오 .... 또는 NET Reflector를 사용하여 IL을 디 컴파일하고 좋은 근사값을 얻으십시오 ..... 여기 캡처 기능이 있습니다 ... http://www.orbifold.net/default/ uielementisvisible-returns-false/... 아마도 mouseinputProvider와 관련이 있습니다. –

+0

@ 500-InternalServerError, 지금까지 시도한 코드를 추가했습니다. 그것은 내가 마우스를 잡은 다른 사람이 없다고 믿게한다. –

답변

1

첫 번째 반복으로 귀하의 고객과 이야기하겠습니다.

다음은 항상 대화 상자 옵션 창을 열고 대화 상자 옵션 창을 엽니 다. 대화 상자 창은 항상 원래 창의 맨 위에 표시되며 호출을 차단하지만 전반적인 실행을 전혀 방해하지는 않습니다. 고객이 그 행동을 보게된다면 그 사실에 행복 할 것입니다.

namespace StackoverflowExample 
{ 
    public partial class MainWindow : Window 
    { 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
    void NewWindowAsDialog(object sender, RoutedEventArgs e) 
    { 
     Window myOwnedDialog = new Window(); 
     myOwnedDialog.Owner = this; 
     myOwnedDialog.ShowDialog(); 
    } 
    } 
} 

xaml의 하위 구분 (그리드 등)으로 창을로드하는 방법을 설명하는 다른 옵션을 나중에 게시 할 예정입니다. mouscall을 필터링하는 대신 해당 부서에로드 된 컨텐츠를 기반으로 다른 모든 호출을 필터링 할 수 있습니다. 필터링은 논리적 대 뷰 트리의 문제에 부딪 힐 수 있습니다. 자신 만의 템플릿을 처음부터 만들면 트리를보고 싶을 것입니다.