相关疑难解决方法(0)

如何确定是否通过鼠标或键选择?

我有一个MVVM应用程序,在窗口的左侧有一个WPF TreeView.右侧的详细信息面板根据所选的树节点更改内容.

如果用户选择节点,则详细信息面板的内容会立即更改.如果用户点击该节点,则需要这样做,但如果用户使用键向下/向上导航树,我想延迟更改内容.(与Windows资源管理器的行为相同,至少在Win XP下)我假设我必须在我的ViewModel中知道是否通过鼠标或键盘选择了节点.

我怎样才能做到这一点?

更新:

这是我的第一篇文章,因此我不确定这是不是正确的地方,但我想让社区知道我在此期间做了什么.这是我自己的解决方案.我不是专家,所以我不知道这是不是一个好的解决方案.但它适用于我,如果能帮助别人,我会很高兴.错误修正,改进或更好的解决方案非常受欢迎.

我创建了下面附加的属性HasMouseFocus ...
(首先我使用了MouseEnterEvent但是如果用户使用键向上/向下导航树并且鼠标指针随机遍布任何导航的树项目,这不能很好地工作,因为在这种情况下详细信息立即更新.)

public static bool GetHasMouseFocus(TreeViewItem treeViewItem)
{
  return (bool)treeViewItem.GetValue(HasMouseFocusProperty);
}

public static void SetHasMouseFocus(TreeViewItem treeViewItem, bool value)
{
  treeViewItem.SetValue(HasMouseFocusProperty, value);
}

public static readonly DependencyProperty HasMouseFocusProperty =
  DependencyProperty.RegisterAttached(
    "HasMouseFocus",
    typeof(bool),
    typeof(TreeViewItemProperties),
    new UIPropertyMetadata(false, OnHasMouseFocusChanged)
  );

static void OnHasMouseFocusChanged(
  DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
  TreeViewItem item = depObj as TreeViewItem;
  if (item == null)
    return;

  if (e.NewValue is bool == false)
    return;

  if ((bool)e.NewValue)
  {
    item.MouseDown += OnMouseDown;
    item.MouseLeave += OnMouseLeave; …
Run Code Online (Sandbox Code Playgroud)

c# wpf .net-4.0 mvvm treeviewitem

8
推荐指数
1
解决办法
620
查看次数

将任何按下的键绑定到VM WPF中

我正在尝试将任何按下的键盘键绑定到命令中ViewModel.

我知道我可以绑定一个特定的密钥,使用:

<Window.InputBindings>
    <KeyBinding Command="{Binding ChangeIdCommand}" Key="B"/>
</Window.InputBindings>
Run Code Online (Sandbox Code Playgroud)

我可以绑定所有按键,ChangeIdCommand而无需手动输入所有按键吗?

c# wpf command key-bindings mvvm

7
推荐指数
1
解决办法
1929
查看次数

如何检测何时按下热键(快捷键)

如何在WPF中按下诸如Ctrl+之类的快捷键O(独立于任何特定控件)?

我试图捕捉KeyDown,但KeyEventArgs并没有告诉我是否ControlAlt已关闭.

.net wpf keyboard-shortcuts hotkeys

5
推荐指数
1
解决办法
3121
查看次数

文本框Enter键事件在WPF中不起作用

keydown事件无法正常工作。我想在按下回车键时引发与按钮相同的事件。这是C#

    public partial class Search : Control
    {
        public SearchRevision()
        {
            InitializeComponent();
        }


        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            SearchViewModel vm = this.DataContext as SearchViewModel;
            if (vm != null)
                vm.Refresh();
        }

        private void myTextBox_KeyDown(Object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                SearchViewModel vm = this.DataContext as SearchViewModel;
                if (vm != null)
                    vm.Refresh();
            }
        }

        private void myTextBox_Escape(Object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)
            {
                txtName.Text = "";
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# wpf

2
推荐指数
2
解决办法
1万
查看次数

Mvvm TextBox KeyDown事件

我想知道如何在ViewModel中使用MVVM处理KeyDown事件.

我有一个TextBox,当用户点击一个不是数字的键时,不应该允许输入.我通常会使用这样的代码(不是完整的代码,只是一个简单的例子):

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{

    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        e.Handled = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想用命令以某种方式将它放在我的ViewModel中.我是MVVM的新手,我现在只使用Bindings(工作正常:)),但我根本不知道如何使用命令...

我的TextBox看起来像这样:

<TextBox Text="{Binding MyField, Mode=TwoWay}"/>
Run Code Online (Sandbox Code Playgroud)

视图模型:

private string _myfield;
public string MyField{
  get { return _myfield; }
  set { 
    _myfield= value;
    RaisePropertyChanged( ()=>MyField)
  }
}
Run Code Online (Sandbox Code Playgroud)

但是只有当我离开TextBox +我才能调用setter时,我无法访问输入的Key.

events keydown mvvm

1
推荐指数
2
解决办法
7113
查看次数