- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有如下的 WPF xaml 代码:
<StackPanel FocusManager.FocusedElement="{Binding FocusedElement}">
<TextBox Name="txtbox1" Text="FirstText"/>
<TextBox Name="txtbox3" Text="SecondText"/>
<TextBox Name="txtbox2" Text="ThirdText"/>
</StackPanel>
如何将 FocusedElement 绑定(bind)到 ViewModel 中的属性? 类似的代码如下:
Switch(Type)
{
Case "FirstType" :
FocusedElement = "txtbox1";
break;
Case "SecondType" :
FocusedElement = "txtbox2";
break;
Case "ThiredType" :
FocusedElement = "txtbox3";
break;
}
最佳答案
viewmodel 永远不应该知道 View ,当然也不知道一些 UIElement 名称。但是鉴于 View 模型确实需要能够管理焦点(我建议您在继续之前确保确实如此),您可以这样做:
View 模型:
public enum Focuses
{
None = 0,
First,
Second,
Third
}
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private Focuses _focusedElement;
public Focuses FocusedElement { get { return _focusedElement; } set { _focusedElement = value; OnPropertyChanged("FocusedElement"); } }
public ViewModel()
{
this.FocusedElement = Focuses.Second;
}
}
Xaml:
<StackPanel >
<TextBox Name="txtbox1" Text="FirstText"/>
<TextBox Name="txtbox2" Text="SecondText"/>
<TextBox Name="txtbox3" Text="ThirdText"/>
<StackPanel.Style>
<!-- cannot use DataTriggers directly in StackPanel.Triggers, therefore Style -->
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding FocusedElement}" Value="First">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=txtbox1}"/>
</DataTrigger>
<DataTrigger Binding="{Binding FocusedElement}" Value="Second">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=txtbox2}"/>
</DataTrigger>
<DataTrigger Binding="{Binding FocusedElement}" Value="Third">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=txtbox3}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
</StackPanel>
关于wpf - 动态改变 FocusManager.FocusedElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321047/
我使用 Prism 和 MVVM 创建了一个基本应用程序。到目前为止,它仅由 Shell 和一个 View/ViewModel 组成。 在应用程序加载过程中,我将 View 加载到我的主要区域中并显示
我使用绑定(bind)将 FocusManager.FocusedElement 作为参数传递。
我有如下的 WPF xaml 代码: 如何将 FocusedElement 绑定(bind)到 ViewModel 中的属性? 类似的代码如下: Switch
我有如下的 WPF xaml 代码: 如何将 FocusedElement 绑定(bind)到 ViewModel 中的属性? 类似的代码如下: Switch
我正在尝试将键盘焦点设置为包含在堆栈面板中的文本框。当 IsEditMode 变为 true 时,我希望文本框默认成为焦点。 我试过这个代码:
Keyboard.FocusedElement 给出具有键盘焦点的元素。但是它没有二传手。我想通过代码将此属性设置为另一个元素。有办法吗? 关于 microsoft's site ,它是这样说的:“键
我有几个数据网格的应用程序并导出到 excel 命令,它将焦点数据网格作为命令参数。是否可以将 CommandParameter 绑定(bind)到 FocusManager.FocusedEleme
我想要一个始终绑定(bind)到当前焦点控件的属性。 我见过两种获取当前焦点控件的方法。 一个是使用 Keyboard.FocusedElement。第二个是遍历可视化树。 因为我想知道每次焦点元素发
我有一个自定义 RoutedUICommand MyCommand 通过 ICommand.Execute 执行.顶部窗口有一个绑定(bind)来处理它: 这是此命令的唯一处理程序。我还
我是一名优秀的程序员,十分优秀!