【问题标题】:WPF Toolkit ColorPicker remove focusWPF Toolkit ColorPicker 移除焦点
【发布时间】:2015-12-08 11:54:22
【问题描述】:

我正在使用扩展 WPF 工具包中的 ColorPicker 控件,但有一些限制,因为我希望用户只启用 ColorCanvas。

<xctk:ColorPicker Focusable="False" ColorMode="ColorCanvas" 
    ShowAdvancedButton="False" ShowDropDownButton="False" 
    ShowAvailableColors="False" SelectedColor="{Binding CustomAccentColor}" 
    ShowRecentColors="False" ShowStandardColors="False" />

当点击ToggleButton 时,画布会显示出来,用户可以选择他想要的颜色。但是,在画布外部单击时会按预期关闭。

现在的问题是,当按下空格键时,画布会再次打开。在应用程序中,除了包含 Window 之外的任何内容都不能具有焦点,因此空格键按下可以路由到特定命令。

我已经尝试设置Focusable="False",绑定到LostFocus-事件并在代码隐藏中将焦点设置在窗口上,但没有任何效果。事件回调从未被击中。 我也尝试过SelectedColorChanged-event,但这也不起作用。

如何将焦点从ColorPicker 移回我的Window?

【问题讨论】:

    标签: c# wpf wpftoolkit


    【解决方案1】:

    这对我有用:

    private void Selected_Color_Changed(object sender, RoutedPropertyChangedEventArgs<Color?> e)
    {
        YourRichTextControlElement.Focus();
    
        Xceed.Wpf.Toolkit.ColorPicker colorPicker = sender as Xceed.Wpf.Toolkit.ColorPicker;
    
        colorPicker.IsOpen = false;
     }
    

    【讨论】:

      【解决方案2】:

      您可能会发现 LostFocus 甚至是在实际上具有焦点的较低控件上处理的,因此您看不到它。您可以做的是挂钩 PreviewKeyDown 事件并在检查中添加以下内容以检查您想要抑制的任何键:

         private void ColorPicker_PreviewKeyDown(object sender, KeyEventArgs e)
          {
              if (e.Key == Key.Space)
              {
                  e.Handled = true;
                  ColorPicker1.IsOpen = true;
              }
          }
      

      这将通过阻止 ColorPicker 控件接收 KeyDown 事件来覆盖在 ColorPicker 控件中处理的行为。您还可以使用以下方式移动焦点:

          private void ColorPicker_GotFocus(object sender, RoutedEventArgs e)
          {
              ColorPicker1.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));
          }
      

      这将确保鼠标单击将焦点移回之前的焦点控件。但它不会阻止无限循环,因此请确保它不会将注意力集中在自身上!

      最后,您可能还希望将 IsTabStop 和 IsKeyboardFocus 设置为 false 以防止在您不希望颜色选择器具有焦点或被选项卡进入时使用选项卡进入。

      注意: 我在这里使用命名控件,但您应该能够通过发件人获取相关控件。

      【讨论】:

        猜你喜欢
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 2013-04-17
        • 1970-01-01
        • 2011-02-24
        相关资源
        最近更新 更多