2011-03-24 4 views
3

현재 시스템 트레이 아이콘의 컨텍스트 메뉴에서 텍스트 상자를 사용하려고합니다.
문제는 텍스트 상자가 keydown 이벤트에 반응하지 않는다는 것입니다. 즉, 내 텍스트 상자에 텍스트를 삽입 할 수 없다는 의미입니다.C# WPF MVVM - 시스템 트레이 아이콘의 텍스트 상자

private RelayCommand<KeyEventArgs> _KeyDown; 
    public RelayCommand<KeyEventArgs> KeyDown 
    { 
     get 
     { 
      if (_KeyDown == null) 
      { 
       _KeyDown = new RelayCommand<KeyEventArgs>(delegate(KeyEventArgs e) 
       { 
        //Functionality that you need to perform on this event  
       }); 
      } 
      return _KeyDown; 
     } 
    } 

귀하의 XAML가 나타납니다 : "초기"뷰 모델의 참조를 반환 ViewModelLocator (로케이터)의 속성이 여기라고 가정


<tb:TaskbarIcon x:Name="NotifyIcon" ToolTip="App" IconSource="/Images/MyIcon.ico" > 
    <tb:TaskbarIcon.ContextMenu> 
     <ContextMenu MaxWidth="180"> 
      <MenuItem Width="auto" Header="Template"> 
       <MenuItem.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel Width="auto" Height="auto" Orientation="Horizontal" > 
          <TextBox Height="20" Text="{Binding Initial.textBoxText, Source={StaticResource Locator}, Mode=TwoWay}" HorizontalAlignment="Left" 
               Name="txtNumberFromTrail" VerticalAlignment="Center" Width="105" > 
           <i:Interaction.Triggers> 
            <i:EventTrigger EventName="KeyDown"> 
             <cmd:EventToCommand Command="{Binding Initial.KeyDown, Source={StaticResource Locator}}" 
                     PassEventArgsToCommand="True" /> 
            </i:EventTrigger> 
           </i:Interaction.Triggers> 
          </TextBox> 
         </StackPanel> 
        </DataTemplate> 
       </MenuItem.HeaderTemplate> 
      </MenuItem> 
     </ContextMenu> 
    </tb:TaskbarIcon.ContextMenu> 
</tb:TaskbarIcon> 
+1

? 일반 텍스트 키 또는 특수 키 (예 : 화살표 키)? – thumbmunkeys

답변

0

는 뷰 모델의 명령을 정의 할 방법입니다 나에게 잘해라. 위와 같이 명령을 정의하면 잘 작동합니다.

0

텍스트 상자를 포커스하는 데 어려움이있는 것은 텍스트 상자 컨트롤이 속한 창 스레드를 활성화하지 않았기 때문입니다. 아래 코드를 확인하십시오. 행복한 코딩.

[DllImport("USER32.DLL")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 

하고 ...

녹음하고 싶어 키
tb.ShowCustomBalloon((UIElement)balloon, System.Windows.Controls.Primitives.PopupAnimation.Scroll, null); 

HwndSource source = (HwndSource)PresentationSource.FromVisual(balloon); 
IntPtr handle = source.Handle; 

SetForegroundWindow(handle);