В WPF Datagrid, как получить всплывающую подсказку на клавиатуре с помощью клавиш со стрелками? - PullRequest
0 голосов
/ 02 февраля 2012

Я использую WPF DataGrid из codeplex. Я приложил всплывающую подсказку для каждой ячейки. Эта подсказка появляется, когда мышь наводит курсор на ячейку.

Но могу ли я предоставить возможность клавиатуры для всплывающей подсказки . Если я использую стрелку вниз или стрелку вверх для перемещения между ячейками DataGrid (в основном, когда ячейка получает фокус), я хочу, чтобы подсказка была видимой.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 02 февраля 2012

Создайте собственную подсказку и попробуйте это:

WPF Solution:

  • XAML:

    <Button Canvas.Left="298" Canvas.Top="124" Height="34" 
      Name="button1"  Width="106" IsKeyboardFocusedChanged="showToolTip">
        Button
        <Button.ToolTip>
            <ToolTip>
                Whatever
            </ToolTip>
        </Button.ToolTip>
    </Button>
    
  • Общий обработчик событий: (Таким образом, все элементы управления могут ссылаться на этот обработчик событий вместо создания нового для каждого элемента управления)

  • public void showToolTip(object sender, DependencyPropertyChangedEventArgs e)
    {
        //Get tooltip from sender.
        ToolTip tt = (ToolTip)(sender as Control).ToolTip;
        //Places the Tooltip under the control rather than at the mouse position
        tt.PlacementTarget = (UIElement)sender;
        tt.Placement = PlacementMode.Right;
        tt.PlacementRectangle = new Rect(0, (sender as Control).Height, 0, 0);
        //Shows tooltip if KeyboardFocus is within.
        tt.IsOpen = (sender as Control).IsKeyboardFocusWithin;
    }
    

Решение WinForm: (Я знаю, что вы не просили об этом, но у меня было написано, так что я все равно опубликую.)

public class myUserControls: UserControl
{
    [Category("Category for UserControl")]
    public class ToolTipAdv : ToolTip
    {
        public ToolTipAdv (IContainer container) : base(container)
        {
            this.AutomaticDelay = 300;
            this.BackColor = System.Drawing.SystemColors.Highlight;
            this.ForeColor = System.Drawing.Color.White;
        }

        public void SetToolTip(Control ctrl, string caption)
        {
            ctrl.GotFocus += ShowToolTip;
            base.SetToolTip(ctrl, caption);
        }
        public void ShowToolTip(object sender, EventArgs e)
        {
            string message = base.GetToolTip((Control)sender);
            base.Show(message, (IWin32Window)sender, (sender as Control).Location);
        }

    }
}
...