记录在学习与制作WPF过程中遇到的解决方案。
焦点的控制,键盘事件触发,输入框的数字限制,异步处理,隐藏状态可用状态,自定义属性等等...
二、配置
系统环境:win10
开发工具:Visual Studio 2017
开发语言:C#.WPF (MVVM框架)
三、自问自答
1.焦点的控制;
背景:
焦点的使用一般用于输入框,切换业务功能时,需要焦点定位在指定输入框位置,便于用户操作;使用MVVM框架开发后,对于前端控件的焦点控制不便调用,控件绑定的都是偏向于文本内容和事件,不像windowsFrom那般直接调用控件的焦点属性;
解决方式:
1)自定义属性;
这种方法我不贴代码了,第二次重新编辑该文章时再补充关于自定义属性的调用说明;
2)前端布局所需焦点,后端遍历;
在Grid的Style样式里面设置好需要布置焦点的触发器;
后期每次更改焦点前,都把所有焦点触发器设置为false,然后在更改指定的焦点为true;
2.1) 前端xaml代码
<Grid> <Grid.Style> <Style> <Style.Triggers> <DataTrigger Binding="{Binding TxtAFocus}" Value="True"> <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=TxtA}"/> </DataTrigger> <DataTrigger Binding="{Binding TxtBFocus}" Value="True"> <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=TxtB}"/> </DataTrigger> <DataTrigger Binding="{Binding TxtCFocus}" Value="True"> <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=TxtC}"/> </DataTrigger> </Style.Triggers> </Style> </Grid.Style> <StackPanel Margin="10"> <StackPanel Orientation="Horizontal"> <TextBox x:Name="TxtA" Text="" Width="100" Height="30" Tag="输入框A..." Style="{StaticResource TxbTrigger}"/> <TextBox x:Name="TxtB" Text="" Width="100" Height="30" Margin="5" Tag="输入框B..." Style="{StaticResource TxbTrigger}"/> <TextBox x:Name="TxtC" Text="" Width="100" Height="30" Tag="输入框C..." Style="{StaticResource TxbTrigger}"/> </StackPanel> <StackPanel Orientation="Horizontal"> <Button Content="焦点A" Width="80" Height="28" Command="{Binding BtnA}" Template="{StaticResource DefaultButton}" Foreground="White"/> <Button Content="焦点B" Width="80" Height="28" Command="{Binding BtnB}" Margin="20" Template="{StaticResource DefaultButton}" Foreground="White" /> <Button Content="焦点C" Width="80" Height="28" Command="{Binding BtnC}" Template="{StaticResource DefaultButton}" Foreground="White" /> </StackPanel> </StackPanel> </Grid>