精华内容
下载资源
问答
  • wpf焦点移动

    2015-11-03 16:59:11
    UIElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down)); 向上跟向下的反应很慢,左跟右都不会,这个该怎么优化
  • 选中窗体 然后找到下图事件,为windos键盘事件 /** ... * 失去焦点 * */ private void tb_username_LostFocus(object sender, RoutedEventArgs e) { if (StringUtils.IsEmpty(tb_username...

    选中窗体
    然后找到下图事件,为windos键盘事件
    在这里插入图片描述

      /**
      
             * 失去焦点
             * */
            private void tb_username_LostFocus(object sender, RoutedEventArgs e)
            {
                if (StringUtils.IsEmpty(tb_username.Text)) {
                    tb_username.Text = "请输入用户名";
                    tb_username.Foreground = new SolidColorBrush(Color.FromRgb(110, 108, 108));
                }
            }
    
            /**
                获取焦点
                 */
            private void tb_username_GotFocus(object sender, RoutedEventArgs e)
            {
                if ("请输入用户名".Equals(tb_username.Text)) {
                    tb_username.Text = "";
                    tb_username.Foreground = new SolidColorBrush(Colors.Black);
                }
              
            }
    
            private void tb_password_GotFocus(object sender, RoutedEventArgs e)
            {
                if ("请输入密码".Equals(tb_password.Text))
                {
                    tb_password.Text = "";
                    tb_password.Foreground = new SolidColorBrush(Colors.Black);
                }
    
            }
    
            private void tb_password_LostFocus(object sender, RoutedEventArgs e)
            {
                if (StringUtils.IsEmpty(tb_password.Text))
                {
                    tb_password.Text = "请输入密码";
                    tb_password.Foreground = new SolidColorBrush(Color.FromRgb(110, 108, 108));
                }
            }
    
            private void Window_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyStates == Keyboard.GetKeyStates(Key.Tab)) {
                    if (tb_username.IsFocused) {
                        tb_password.Focus();
                    }
                }
    
                if (e.KeyStates == Keyboard.GetKeyStates(Key.Enter))
                {
                    login();
                }
            }
    
            //登录
            private void login()
            {
                
            }
    
    展开全文
  • [转]WPF焦点概述

    2015-01-27 15:24:00
    WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点。 键盘焦点指接收键盘输入的元素,而逻辑焦点焦点范围中具有焦点的元素。 本概述将详细介绍这些概念。 理解这些概念之间的区别对于创建具有可以获取焦点...

    WPF 中,有两个与焦点有关的主要概念:键盘焦点逻辑焦点。 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素。 本概述将详细介绍这些概念。 理解这些概念之间的区别对于创建具有可以获取焦点的多个区域的复杂应用程序是非常重要的。

    参与焦点管理的主要类有 Keyboard 类、FocusManager 类以及基元素类(如 UIElementContentElement)。 有关基元素的更多信息,请参见基元素概述

    Keyboard 类主要与键盘焦点相关,而 FocusManager 则与逻辑焦点相关,但这种区别不是绝对的。 具有键盘焦点的元素也将具有逻辑焦点,但具有逻辑焦点的元素不一定具有键盘焦点。 当您使用 Keyboard 类来设置具有键盘焦点的元素时,这一点是很明显的,因为它还在元素上设置逻辑焦点。

    键盘焦点

    键盘焦点指当前正在接收键盘输入的元素。 在整个桌面上,只能有一个具有键盘焦点的元素。 在 WPF 中,具有键盘焦点的元素会将 IsKeyboardFocused 设置为 true。 Keyboard 类的静态属性 FocusedElement 获取当前具有键盘焦点的元素。

    为了使元素能够获取键盘焦点,基元素的 FocusableIsVisible 属性必须设置为 true。 有些类(如 Panel 基类)默认情况下将 Focusable 设置为 false;因此,如果您希望此类元素能够获取键盘焦点,必须将 Focusable 设置为 true。

    可以通过用户与 UI 交互(例如,按 Tab 键定位到某个元素或者在某些元素上单击鼠标)来获取键盘焦点。 还可以通过使用 Keyboard 类的 Focus 方法,以编程方式获取键盘焦点。 Focus 方法尝试将键盘焦点给予指定的元素。 返回的元素是具有键盘焦点的元素,如果有旧的或新的焦点对象阻止请求,则具有键盘焦点的元素可能不是所请求的元素。

    下面的示例使用 Focus 方法在 Button 上设置键盘焦点。

     
     
    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        // Sets keyboard focus on the first Button in the sample.
        Keyboard.Focus(firstButton);
    }

    基元素类的 IsKeyboardFocused 属性获取一个指示元素是否具有键盘焦点的值。 基元素类的 IsKeyboardFocusWithin 属性获取一个指示元素或者它的任何一个可视子元素是否具有键盘焦点的值。

    当在应用程序启动时设置初始焦点时,接收焦点的元素必须连接到一个 PresentationSource,并且该元素必须将 FocusableIsVisible 设置为 true。 设置初始焦点的推荐位置是在 Loaded 事件处理程序中。 还可以通过调用 InvokeBeginInvoke 来使用 Dispatcher 回调。

    逻辑焦点

    逻辑焦点指焦点范围中的 FocusManager

    .FocusedElement。 焦点范围是一个跟踪其范围内的 FocusedElement 的元素。 当键盘焦点离开焦点范围时,焦点元素会失去键盘焦点,但保留逻辑焦点。 当键盘焦点返回到焦点范围时,焦点元素会再次获得键盘焦点。 这使得键盘焦点可以在多个焦点范围之间切换,但确保了在焦点返回到焦点范围时,焦点范围中的焦点元素再次获得键盘焦点。

    一个应用程序中可以有多个具有逻辑焦点的元素,但在一个特定的焦点范围中只能有一个具有逻辑焦点的元素。

    具有键盘焦点的元素还具有它所属的焦点范围的逻辑焦点。

    在可扩展应用程序标记语言 (XAML) 中,可以通过将 FocusManager 附加属性 IsFocusScope 设置为 true,将元素转变为焦点范围。 在代码中,可以通过调用 SetIsFocusScope 将元素转变为焦点范围。

    下面的示例通过设置 IsFocusScope 附加属性将 StackPanel 转变为焦点范围。

    <StackPanel Name="focusScope1" FocusManager.IsFocusScope="True" Height="200" Width="200"> <Button Name="button1" Height="50" Width="50"/> <Button Name="button2" Height="50" Width="50"/></StackPanel>
     
    StackPanel focuseScope2 = new StackPanel();
    FocusManager.SetIsFocusScope(focuseScope2, true);

    GetFocusScope 返回指定元素的焦点范围。

    WPF 中默认情况下即为焦点范围的类有 WindowMenuItemToolBarContextMenu

    GetFocusedElement 获取指定焦点范围的焦点元素。SetFocusedElement 设置指定焦点范围中的焦点元素。SetFocusedElement 通常用于设置初始焦点元素。

    下面的示例设置焦点范围中的焦点元素并获取焦点范围的焦点元素。

     
     
    // Sets the focused element in focusScope1
    // focusScope1 is a StackPanel.
    FocusManager.SetFocusedElement(focusScope1, button2);

    // Gets the focused element for focusScope 1
    IInputElement focusedElement = FocusManager.GetFocusedElement(focusScope1);

    键盘导航

    当按下导航键之一时,KeyboardNavigation 类将负责实现默认键盘焦点导航。 导航键有:Tab、Shift+Tab、Ctrl+Tab、Ctrl+Shift+Tab、向上键、向下键、向左键和向右键。

    可以通过设置附加的 KeyboardNavigation 属性 TabNavigationControlTabNavigationDirectionalNavigation 来更改导航容器的导航行为。 这些属性是 KeyboardNavigationMode 类型,可能值有 ContinueLocalContainedCycleOnce 以及 None。 默认值是 Continue,这意味着元素不是导航容器。

    下面的示例创建包含许多 MenuItem 对象的 MenuMenuTabNavigation 附加属性设置为 Cycle。 当使用 Tab 键在 Menu 中改变焦点时,焦点将从每个元素上移过,当到达最后一个元素后会返回第一个元素。

     
     
    <Menu KeyboardNavigation.TabNavigation= "Cycle">
      <MenuItem Header="Menu Item 1" />
      <MenuItem Header="Menu Item 2" />
      <MenuItem Header="Menu Item 3" />
      <MenuItem Header="Menu Item 4" />
    </Menu>
     
     
    Menu navigationMenu = new Menu();
    MenuItem item1 = new MenuItem();
    MenuItem item2 = new MenuItem();
    MenuItem item3 = new MenuItem();
    MenuItem item4 = new MenuItem();

    navigationMenu.Items.Add(item1);
    navigationMenu.Items.Add(item2);
    navigationMenu.Items.Add(item3);
    navigationMenu.Items.Add(item4);

    KeyboardNavigation.SetTabNavigation(navigationMenu,   KeyboardNavigationMode.Cycle);

    以编程方式定位焦点

    处理焦点的其他 API 有 MoveFocusPredictFocus

    MoveFocus 将焦点移到应用程序中的下一个元素。 TraversalRequest 用于指定方向。 传递给 MoveFocusFocusNavigationDirection 指定焦点可以移动的不同方向,如 FirstLastUpDown

    下面的示例使用 MoveFocus 来改变焦点元素。 有关此示例的完整源代码,请参见以编程方式操作焦点示例

     
     
    // Creating a FocusNavigationDirection object and setting it to a
    // local field that contains the direction selected.
    FocusNavigationDirection focusDirection = _focusMoveValue;

    // MoveFocus takes a TraveralReqest as its argument.
    TraversalRequest request = new TraversalRequest(focusDirection);

    // Gets the element with keyboard focus.
    UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;

    // Change keyboard focus.
    if (elementWithFocus != null)
    {
        elementWithFocus.MoveFocus(request);
    }

    PredictFocus 返回当要改变焦点时将接收焦点的对象。 当前,PredictFocus 仅支持 UpDownLeft 以及 Right

    焦点事件

    与键盘焦点相关的事件有 PreviewGotKeyboardFocusGotKeyboardFocusPreviewLostKeyboardFocus 以及 LostKeyboardFocus。 这些事件定义为 Keyboard 类的附加事件,但更便于作为基元素类上的等效路由事件来访问。 有关事件的更多信息,请参见路由事件概述

    当元素获取键盘焦点时,会引发 GotKeyboardFocus。当元素失去键盘焦点时,会引发 LostKeyboardFocus。 如果处理了 PreviewGotKeyboardFocus 事件或 PreviewLostKeyboardFocusEvent 事件,并且 Handled 设置为 true,则焦点将不会改变。

    下面的示例将 GotKeyboardFocusLostKeyboardFocus 事件处理程序附加到 TextBox

     
     
    <Border BorderBrush= "Black" BorderThickness="1"
            Width="200" Height="100" Margin="5">
      <StackPanel>
        <Label HorizontalAlignment="Center" Content="Type Text In This TextBox" />
        <TextBox Width="175"
                 Height="50"
                 Margin="5"
                 TextWrapping="Wrap"
                 HorizontalAlignment="Center"
                 VerticalScrollBarVisibility="Auto"
                 GotKeyboardFocus="TextBoxGotKeyboardFocus"
                 LostKeyboardFocus="TextBoxLostKeyboardFocus"
                 KeyDown="SourceTextKeyDown"/>
      </StackPanel>
    </Border>

    TextBox 获取键盘焦点时,TextBoxBackground 属性会改为 LightBlue

     
     
    private void TextBoxGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        TextBox source = e.Source as TextBox;

        if (source != null)
        {
            // Change the TextBox color when it obtains focus.
            source.Background = Brushes.LightBlue;

            // Clear the TextBox.
            source.Clear();
        }
    }

    TextBox 失去键盘焦点时,TextBoxBackground 属性会重新改为 white。

     
     
    private void TextBoxLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        TextBox source = e.Source as TextBox;

        if (source != null)
        {
            // Change the TextBox color when it loses focus.
            source.Background = Brushes.White;

            // Set the  hit counter back to zero and updates the display.
            this.ResetCounter();
        }
    }

    与逻辑焦点有关的事件有 GotFocusLostFocus。 这些事件在 FocusManager 上定义为附加事件,但 FocusManager 不公开 CLR 事件包装。UIElementContentElement 可以更方便地公开这些事件。

     

     

    文章来源   http://zwkufo.blog.163.com/blog/static/2588251201042014725122/

    转载于:https://www.cnblogs.com/luohengstudy/p/4253077.html

    展开全文
  • 我想判断当前焦点是否在编辑框内,希望能得到类似的例子或者给个思路,谢谢!
  • WPF焦点

    2020-04-19 15:54:58
    本文讲解了WPF焦点的概念,介绍了如何使用FocusManager类来管理焦点。提供源代码来实践模拟对焦点的控制。看完本文可以清晰认识WPF的焦点。

    WPF中的焦点

    WPF中的焦点分两种:键盘焦点逻辑焦点
    很多人刚开始不理解,为什么有两个焦点?
    这两个焦点有什么区别?
    我应该用哪个?
    今天就来讲解一下WPF中的焦点。嗯,看到常见应用那里你就会豁然开朗的。

    一、结论

    先说结论:键盘焦点是真焦点,逻辑焦点是假焦点。

    我们理解的获得焦点是指:一个控件获得焦点后,将处于活动状态。
    键盘焦点就是我们通常说的真焦点,当控件获得键盘焦点后,将处于活动状态。
    控件获得逻辑焦点时,并不能保证处于活动状态。

    二、概念

    1.键盘焦点

    键盘焦点就是我们常识中的焦点。
    当一个控件获得键盘焦点时,这个控件将处于活动状态。
    整个桌面上只能有一个键盘焦点,获得键盘焦点的元素,才可以接受键盘输入。

    2.逻辑焦点和焦点范围

    逻辑焦点:用于记录键盘焦点在焦点范围中的位置。
    焦点范围:逻辑焦点可以活动的范围,逻辑焦点不能离开焦点范围。

    键盘焦点离开焦点范围时,逻辑焦点不会跟随键盘焦点离开,而是保留在离开时的位置,当键盘焦点回到这个焦点范围时,首先会回到逻辑焦点所在的位置。

    三、常见应用

    逻辑焦点的应用在多个窗体间交互最为直观。

    每当你在网页上的某个输入框准备输入内容时,切换到其他网页或软件,再回到刚才的网页,你会发现,你的光标还是在这个输入框内。为什么他能记住你光标之前的位置呢?我们总是想当然以为,本来就该是这样啊。其实这就是因为窗体中保留了逻辑焦点
    你可以直接开两个网页,然后切换看看就知道了。很简单。

    键盘焦点回到焦点范围时,逻辑焦点所在控件首先获得键盘焦点
    通过这个例子,相信各位瞬间就能理解这三个概念了吧。

    四、焦点管理

    FcousManager类

    FocusManager类为焦点管理提供了两个附加属性。

    1.FocusedElement

    指定一个控件,当打开这个画面时,这个控件自动获得键盘焦点。

    2.IsFocusScope

    设置这个附加属性的控件是否建立焦点范围。
    如果设置为True,则这个控件内形成一个焦点范围。当焦点离开这个范围时,内部的子控件将会保留逻辑焦点。

    以及一些管理焦点的方法:

    FcousManager.GetFocusScope()方法

    使用该方法返回最近一个焦点范围。

    FocusManager.GetIsFocus()方法

    指定控件是否时焦点范围。

    FocusManager.SetFocused()方法

    使一个控件获得逻辑焦点。

    注意:要获得焦点的前提是,Focusable属性为True。

    其他管理焦点的方法

    Keyboard.Focus()方法

    尝试为指定控件获得键盘焦点

    Control.Focus()方法

    尝试为指定控件获得键盘焦点

    IsFocused

    检测是否获得逻辑焦点

    IsKeyboardFocused

    检测是否获得键盘焦点

    对你有帮助吗?点个赞吧~

    展开全文
  • 设置WPF输入框焦点

    2018-08-09 08:58:00
    设置WPF输入框焦点 原文:设置WPF输入框焦点WPF中设置控件键盘焦点 Keyboard.Focus(/*控件名称*/); posted on 2018-08-09 08:58 NET未来之路 阅读(...) 评论(....
    原文: 设置WPF输入框焦点

    在WPF中设置控件键盘焦点

    Keyboard.Focus(/*控件名称*/);
    posted on 2018-08-09 08:58 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/9446820.html

    展开全文
  • WPF 程序提供了 Focus 方法和 TraversalRequest 来在 WPF 焦点范围内转移焦点。但如果 WPF 窗口中嵌入了其他框架的 UI(比如另一个子窗口),那么就需要使用其他的方法来设置焦点了。 一个粗略的设置方法是,使用 ...
  • WPF文本框焦点移动

    2012-05-03 10:38:48
    一个仿照迅雷7文本输入的效果,很漂亮的。 与大家分享一下。
  • WPF中的焦点

    2021-03-16 11:28:07
    WPF中的焦点分两种:键盘焦点和逻辑焦点。 很多人刚开始不理解,为什么有两个焦点? 这两个焦点有什么区别? 我应该用哪个? 今天就来讲解一下WPF中的焦点。嗯,看到常见应用那里你就会豁然开朗的。 一、结论 先说...
  • WPF-控件SAP焦点

    千次阅读 2014-01-16 11:31:22
    WPF-控件SAP焦点
  • WPF选择所有焦点行为

    2021-04-02 20:38:40
    当TextBox或PasswordBox获得焦点时,此行为将选择整个文本
  • WPF获取焦点时不需要虚线框 我们在写WPF程序的时候回遇到这样的问题,当程序运行的时候,如果获得了焦点,那么在截图的时候控件上会有一个虚线框,对于强迫症患者来说这是个很致命的问题,在找了很多资料之后我终于...
  • 有关WPF UserControl中子控件焦点的bug的变通办法
  • WPF 中可以使用 UIElement.Focus() 将焦点设置到某个特定的控件,也可以使用 TraversalRequest 仅仅移动焦点。本文介绍如何在 WPF 程序中控制控件的焦点。 本文内容`UIElement.Focus``TraversalRequest`关于逻辑...
  • How do I manage this in WPF? thanks in advance. 解决方案This[^] could help. What you ask does not mean "focus change"; you want to keep window activated. Activated status and focus are related but ...
  • WPF-控件SAP焦点样式

    2014-01-16 11:26:58
    WPF-控件SAP焦点样式
  • WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌。这时,其自带的键盘焦点样式(FocusVisualStyle)就非常不搭了,改改会...
  • 在父类容器中通过附加属性FocusManager.FocusedElement来绑定需要强制获得焦点的控件。 意思是:如果在父类容器中,设置了FocusManager.FocusedElement指向某一控件,那么每当这个界面出现时,首次出现,或者关闭...
  • I created some textboxes and I want user to enter decimal values into them. In every application I have ever used, when I type something into the textbox and hit enter, the value is accepted and textb...
  • 需求: 点击按钮,会弹出的用户名和密码...分析原因:因为需求是二级对话框的Textbox,在点击一级窗口的按钮时,焦点发生了拜年话,textBox.Focus()写在构造函数中,时机不对。 修改: CodeBehind,构造函数中,this.Lo
  • WPF中textbox强制失去焦点

    千次阅读 2017-12-08 14:10:32
    WPF中textbox强制失去焦点
  • 因为是触摸屏,所以做了一个外部键盘程序,但是在文本框获取焦点打开键盘程序时,焦点失去,文本框如何重新获取焦点
  • 在开发触屏用的WPF程序时遇到一个坑,页面是输入框配合软键盘输入,但是TextBox获取焦点后,手指点击其他TextBox或者按钮第一次都不响应,第二次才响应。 多次尝试后发现是由于TextBox未设置宽度,仅使用margin导致...
  • // 版本2,控件完全加载完毕后执行焦点设置 //this.Loaded += new RoutedEventHandler(MainWindow_Loaded); } void MainWindow_Loaded(object sender, RoutedEventArgs e) { Keyboard.Focus...
  • WPF窗口默认TextBox焦点

    千次阅读 2018-08-17 09:01:23
    WPF窗口显示后 如果想设置某个输入框为默认焦点 使用 FocusManager &lt;Grid FocusManager.FocusedElement="{Binding ElementName=inputbox}"&gt; &lt;TextBox Name="inputbox"...
  • WPF控件获得焦点时去除虚线框 原文:WPF控件获得焦点时去除虚线框 <Setter Property="FocusVisualStyle" Value="{x:Null}" /> posted on 2018-08-08 16:27 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,769
精华内容 1,907
关键字:

wpf焦点