我正在尝试在用户控件中设置两个UIElement
的标签索引。用户控件包含一个文本框和按钮。我目前通过附加属性将焦点应用于文本框但是我希望能够按Tab键并从文本块导航到按钮或检测按键(Enter键)并触发按钮上的命令(我知道单独的问题)
主要关注的是首先完成选项卡索引。
感谢您的任何指示或建议。
更新
我已经尝试使用附加属性来处理Tab键顺序
public static DependencyProperty TabIndexProperty = DependencyProperty.RegisterAttached("TabIndex", typeof(int), typeof(AttachedProperties), null);
public static void SetTabIndex(UIElement element, int value)
{
Control c = element as Control;
if (c != null)
{
RoutedEventHandler loadedEventHandler = null;
loadedEventHandler = new RoutedEventHandler(delegate
{
HtmlPage.Plugin.Focus();
c.Loaded -= loadedEventHandler;
c.Focus();
});
c.Loaded += loadedEventHandler;
}
}
然而,当我尝试编译时,我收到的错误是按钮控件不存在TabIndex属性。任何想法为什么会失败?
答案 0 :(得分:2)
这是一个特定于视图的视图,因此,即使在MVVM中也应该在ViewLevel中处理。 MVVM没有规定您从后面的代码中删除所有代码。它只是意味着当你将代码放在那里时,你应该有一个特定于视图的视图。这是其中一个案例,imo。
答案 1 :(得分:0)
当天晚些时候......我用附属物解决了这个问题。在上面的解决方案中,我复制了我创建的早期DP,并且在我测试之前没有更改代码。
以下是工作解决方案
我创建了一个附加的属性类,然后添加了以下代码:
#region Search Field Focus
public static DependencyProperty InitialFocusProperty = DependencyProperty.RegisterAttached("InitialFocus", typeof(bool), typeof(AttachedProperties), null);
public static void SetInitialFocus(UIElement element, bool value)
{
Control c = element as Control;
if (c != null && value)
{
RoutedEventHandler loadedEventHandler = null;
//set focus on control
loadedEventHandler = new RoutedEventHandler(delegate
{
HtmlPage.Plugin.Focus();
c.Loaded -= loadedEventHandler;
c.Focus();
});
c.Loaded += loadedEventHandler;
}
}
public static bool GetInitialFocus(UIElement element)
{
return false;
}
#endregion
#region Tabbing Order of Elements
public static DependencyProperty TabIndexProperty = DependencyProperty.RegisterAttached("TabIndex", typeof(int), typeof(AttachedProperties), null);
public static void SetTabIndex(UIElement element, int value)
{
element.SetValue(TabIndexProperty, value);
}
public static int GetTabIndex(UIElement element)
{
return (int)element.GetValue(TabIndexProperty);
}
#endregion
第一个DP设置文本块的焦点,以便在加载用户控件时,您可以看到光标位于文本字段中。
DP 2设置标签顺序。由于焦点已经应用于当前控制标签正常落入到位。如果您没有专注于控件,则需要先设置它。
然后最终在xaml中声明你的类在xmlns中并添加到控件。