Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Двойной клик по заголовку таблицы


Автор: shtuceron 9.2.2012, 11:01
Здравствуйте, 

Как можно понять, что при двойном клике по таблице мы кликнули по заголовку а не по ячейке?

Автор: RastaDja 9.2.2012, 14:38
Код

private void dataGrid_Data_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
   DataGrid g = sender as DataGrid;
   String type = e.Device.Target.GetType().ToString();
   //  можно приравнивать не строки, а типы, что будет бустрее, но мне кажется идея ясна
   if (type.Equals("System.Windows.Controls.Primitives.DataGridColumnHeader"))
   {
      MessageBox.Show("Table header");
   }
}

Автор: shtuceron 9.2.2012, 16:48
Спасибо, я такие грабли придумывал, вот мой код

Код

switch (dependencyObject.DependencyObjectType.Name)
{
    case "DataGridHeaderBorder":
        break;
    case "TextBlock":
        switch (((System.Windows.Controls.TextBlock)dependencyObject).Text)
        {
            case "DatagridHeaderText":
                break;
            default:
                SomeFunction();
                break;
        }
        break;

    default:
        SomeFunction();
        break;
}


Однако, когда мы кликаем по разделителю колонок у нас тип становится равным
Код

System.Windows.Controls.Border


такой же тип возвращают некоторые колонки (DataGridComboBoxColumn), как обрабатывать такой случай? или как можно отключить двойной клик по разделителю заголовков?

Спасибо.

Автор: RastaDja 10.2.2012, 08:53
Код

private void dataGrid_Data_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{ 
     //  пытаетесь получить строку
     DataGridRow row = ItemsControl.ContainerFromElement((DataGrid)sender, e.OriginalSource as DependencyObject) as DataGridRow;
     //  Если строку получить не удалось
     if (null == row){
             //  Используешь выше привиденный код, скорее всего это заголовок
     }else{
             //  это строка, работаешь как со строкой, получаешь ячейки
     }

}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)