繁体   English   中英

WPF工具包ColorPicker消除焦点

[英]WPF Toolkit ColorPicker remove focus

我正在使用扩展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 -event并将焦点设置在代码隐藏窗口中,但是没有任何效果。 从未发生过事件回调。 我也尝试了SelectedColorChanged -event,但这也没有用。

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

您可能会发现LostFocus甚至在实际上具有焦点的较低控件上进行处理,因此您看不到它。 您可以做的是挂接到PreviewKeyDown事件,然后在检查中添加以下内容以查找要隐藏的任何键:

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

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

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

这将确保鼠标单击将焦点移回到上一个焦点控件。 尽管它不会阻止并产生无限循环,所以请确保它不会将焦点转移回自身!

最后,您可能还希望将IsTabStop和IsKeyboardFocus设置为false,以防止在不希望将其聚焦或跳入制表器时跳入颜色选择器。

注意: 我在这里使用命名控件,但是您应该能够通过发件人获取有问题的控件。

这对我有用:

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;
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM