Использование WPF DataGridHyperLinkColumn Items для открытия проводника Windows и открытия файлов - PullRequest
16 голосов
/ 23 апреля 2011

Я хочу добиться следующего:

Создание таблицы данных WPF с двумя столбцами:

Первый будет иметь элементы, показывающие пути к каталогам, в стиле гиперссылки. При нажатии на гиперссылку откроется проводник Windows по пути, указанному элементом.

Второй будет иметь элементы, показывающие пути к файлам в стиле гиперссылки. Нажатие на гиперссылку запустит файл с приложением по умолчанию, определенным Windows.

Я не знаю, правильный ли это выбор, но я добавил DataGridHyperlinkColumn в свою DataGrid. Одной из проблем было добавление элементов Uri, которые не относятся к интернет-локациям. Другая проблема заключалась в том, чтобы обрабатывать щелчки так, чтобы не открывать веб-браузер.

Кто-нибудь может помочь?

1 Ответ

39 голосов
/ 23 апреля 2011

Это работает универсально:

<DataGridHyperlinkColumn Binding="{Binding Link}">
    <DataGridHyperlinkColumn.ElementStyle>
        <Style>
            <EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/>
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
private void DG_Hyperlink_Click(object sender, RoutedEventArgs e)
{
    Hyperlink link = (Hyperlink)e.OriginalSource;
    Process.Start(link.NavigateUri.AbsoluteUri);
}

Если URI указывает на веб-сайт, он будет открыт с помощью веб-браузера по умолчанию, если это папка, он будет открыт в проводнике, если онэто файл, который будет открыт с приложением по умолчанию, связанным с ним.


Чтобы использовать это для автоматически сгенерированных столбцов, ваше свойство должно иметь тип Uri, поэтому генерируется DataGridHyperlinkColumn.Затем вы можете подключить событие, поместив стиль в DataGrid.Resources:

<DataGrid.Resources>
    <Style TargetType="Hyperlink">
        <EventSetter Event="Click" Handler="DG_Hyperlink_Click"/>
    </Style>
</DataGrid.Resources>
...