WPF ListView DoubleClick OriginalSource проблема - PullRequest
0 голосов
/ 15 февраля 2010

Я прикрепил EventHandler к событию MouseDoubleClick.

<Style TargetType="ListViewItem" BasedOn="{StaticResource MyStyle}">                                
    <EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick" />
</Style>

private void ListViewItem_MouseDoubleClick(object sender, RoutedEventArgs e) {}

Вид ListView основан на GridView, один из столбцов содержит CheckBox.Я хочу иметь возможность игнорировать двойной щелчок , если дважды щелкнуть CheckBox.

Проблема в том, что Я не могу найти исходный источник (CheckBox) чтобы заблокировать его, как и в случае с маршрутизацией, я получил Theme в качестве исходного источника, а с прямым - ListViewItem.

1 Ответ

0 голосов
/ 19 февраля 2010

Вы можете использовать VisualTreeHelper, чтобы узнать, является ли какой-либо предок OriginalSource CheckBox следующим образом:

private void ListViewItem_MouseDoubleClick(object sender, RoutedEventArgs e)
{
    var obj = e.OriginalSource as DependencyObject;

    // suppress event?
    if (IsWithinCheckBox(obj))
        return;

    // handle your event here
}

private bool IsWithinCheckBox(DependencyObject obj)
{
    while (obj != null)
    {
        if (obj is CheckBox)
            return true;

        obj = VisualTreeHelper.GetParent(obj);
    }

    return false;
}
...