簡體   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