2009-02-28 3 views
0

Silverlight 응용 프로그램에서 UserControl (페이지)의 KeyDown 이벤트를 처리하려고 시도했지만 Silverlight 사용자 입력 기능에 이상한 동작이있는 것 같습니다. 어떤 상황에서도 이벤트가 발생하지 않습니다. 나는 심지어 UserControl 내의 각 컨테이너 컨트롤에 이벤트 핸들러를 연결하려고 시도했지만 여전히 운이 없다. 사실, Silverlight 사용자 입력 "이벤트 라우팅"시스템은 매우 새롭고 다소 이상하게 보입니다. 따라서 진행 방법에 관해서는 솔직하게 말하면서도 아마도 내 부분에 대한 오해 일 것입니다.Silverlight 페이지에서 입력 이벤트를 catch하지 않습니다.

다음 코드는 테스트 할 특정 페이지의 템플릿입니다.

<UserControl x:Class="MyNamespace.CreditsPage" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      KeyDown="UserControl_KeyDown"> 
    <Grid x:Name="LayoutRoot"> 
     <Border> 
      <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Vertical"> 
       <TextBlock TextAlignment="Center"> 
       A line of text.<LineBreak /> 
       <LineBreak /> 
       A line of text.<LineBreak /> 
       <LineBreak /> 
       A line of text.<LineBreak /> 
       <LineBreak /> 
       A line of text.<LineBreak /> 
       </TextBlock> 
      </StackPanel> 
     </Border> 
    </Grid> 
</UserControl> 

WPF, 이러한 문제에 대한 확실한 해결책은 PreviewKeyDown 이벤트를 처리하는 것입니다, 그러나 이것은 실버 2. 모든 아이디어를 환영받을에서 사용할 수 없습니다 (왜 실버 라이트 이벤트 라우팅의 간단한 설명 불행하게도 그대로 행동합니다.)

+0

허허 투표 하시겠습니까? – Noldorin

답변

2

당신은 주요 UIElement에서 사용자 입력을 관리 할 수 ​​있습니다

Application.Current.RootVisual.KeyDown += Application_KeyDown 

Application.Current.RootVisual

을 그런 다음 Application_KeyDown 방법에 키보드에서 모든 사용자 입력을 처리 할 수 ​​있습니다.

이 문제를 확인할 수도 있습니다. Handling KeyDown event in a Canvas

1

제공 한 xaml을 시도했지만 KeyDown 이벤트를 전달하는 데 문제가 없었습니다.

한 가지 일이 발생할 수 있습니다. Silverlight 플러그인은 포커스가있는 경우에만 입력 이벤트를 볼 수 있습니다. 따라서 브라우저에서 Silverlight 콘텐츠를 클릭하여 키를 누르기 전에 입력 포커스를 제공하십시오.

문제가 해결되는지 아닌지 알려주세요.

+0

아, 사실 KeyDown 이벤트를 잡는 루트 UserControl 페이지 인 것처럼 보입니다. XAML에 지정된 UserControl이 사실 SwitcherPage의 콘텐츠/하위 항목 이었기 때문에 필자의 게시물에서 설명한 상황은 약간 정확하지 않았습니다. – Noldorin

+0

(계속) 그래서 내 질문은 : SwitcherPage의 콘텐츠 페이지가 사용자 입력 이벤트를 캡처하도록 강제 할 수 있습니까? 할 수 없다면 SwitcherPage의 이벤트를 처리 한 다음 지시하는 것이 쉽지만 더 직접적인 해결책이 있는지 궁금합니다. 어쨌든 답장을 보내 주셔서 감사합니다. – Noldorin

+0

다른 포스터가 RootVisual에서 이벤트를 제안하고 처리 할 때 수행 할 수 있습니다. 이렇게하면 트리에서 UserControl을 제거 할 때이 이벤트에서 처리기를 제거해야합니다. 그렇지 않으면 UserControl은 계속 이벤트를 수신합니다. – KeithMahoney

관련 문제