C # WPF MVVM - текстовое поле в контекстном меню значка панели задач - PullRequest
3 голосов
/ 24 марта 2011

В настоящее время я пытаюсь использовать текстовое поле в контекстном меню значка на панели задач.
Проблема в том, что текстовое поле не реагирует на событие keydown. это означает, что я не могу вставить текст в текстовое поле.


<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>  

Ответы [ 2 ]

0 голосов
/ 11 января 2018

Если у вас возникают трудности с фокусировкой текстового поля, то это потому, что вы не активируете оконную нить, к которой принадлежит элемент управления текстовым полем.Проверьте код ниже.Удачного кодирования.

[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);
0 голосов
/ 03 июня 2011

Предполагая, что "Initial" является свойством в ViewModelLocator (Locator), которое возвращает ссылку на модель представления, вот как вы должны определить команду в модели представления:

    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 выглядит нормально длямне.Если вы определите команду, как указано выше, надеюсь, она будет работать.

...