XAML ToolTip + IsHitTestVisible = "False" - PullRequest
5 голосов
/ 05 мая 2010

Нам нужно, чтобы щелчки и перетаскивания мышью «игнорировались» нашим View1, но подсказка должна все еще функционировать в этом представлении. Причина в том, что View1 находится над View2 в Z-порядке, поэтому View1 может подкрасить View2 красным цветом и показать предупреждение с помощью всплывающей подсказки; однако всплывающая подсказка, сопровождающая View1, не будет работать, если IsHitTestVisible = "False".

Кто-нибудь знает обходной путь, поэтому всплывающая подсказка будет отображаться при перемещении / наведении мыши, а остальные события мыши игнорируются View1 и переходят к View2?

Спасибо

Sean

Ответы [ 3 ]

2 голосов
/ 17 мая 2015

Если кто-то еще сталкивается с той же проблемой, он может найти это полезным.У нас было требование отключить несколько строк в сетке данных, но в то же время разрешить навигацию по клавишам со стрелками на них.Вот почему нам пришлось переключиться на IsHitTestVisible вместо управления свойством IsEnabled.Таким образом, мы не могли принять вышеприведенное решение о переходе на свойство IsEnabled.

Вот как я решил эту проблему.Я создал новое прикрепленное свойство RowEnable для DataGridRow.Это присоединенное свойство может быть привязано к свойству viewmodel для управления включением и отключением virtual.Я также создал новый стиль для DataGridCell, где я устанавливаю IsHitTestVisible в false на основе того же свойства viewmodel.Итак, рассмотрите это как строку, которую мышь / клавиатура может видеть, но не может видеть ее ячейки / столбцы.Это означает, что теперь я могу стилизовать строку на основе нового присоединенного свойства RowEnabled, чтобы оно выглядело отключенным / включенным.В то же время я могу просмотреть всплывающие подсказки для этих буксирных устройств, которые практически отключены.

Надеюсь, это поможет !!

2 голосов
/ 05 мая 2010

То, что я сделал, не очень хорошо:

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        var parentWindow = Window.GetWindow(this);
        var source = PresentationSource.FromVisual(parentWindow) as HwndSource;

        source.AddHook(WndProc);
    }

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        // Handle messages... 
        if (msg == WM_MOUSEMOVE)
        {
        ...show tool tip if mouse is over it
        }
        return IntPtr.Zero;
    }
0 голосов
/ 18 июля 2012

Не устанавливайте IsHitTestVisible="False"!

Просто добавьте эти строки

IsEnable = false
ToolTipService.ShowOnDisabled="True"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...