Источник для небольшой программы WPF показан ниже. В нем перечислены каталоги под c:\windows
в DataGrid
. Имя - это ссылка, по которой можно щелкнуть, чтобы открыть каталог в Проводнике.
(Это просто программа для проверки концепции, иллюстрирующая вопрос.)
Вот как это выглядит:
Вместо того, чтобы только щелкать ссылку для запуска открытого действия, я также хотел бы настроить ее так, чтобы пользователь мог нажать клавишу o
, когда строка подсвечена, чтобы запустить открытое действие. действие.
Какой хороший способ настроить это? Обратите внимание, что программа в основном указана на C #, а не на XAML, поэтому, если возможно, пожалуйста, опубликуйте свое решение на C #. Однако, при необходимости, ответы на XAML тоже приветствуются!
MainWindow.xaml
:
<Window x:Class="WpfFilesDataGrid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfFilesDataGrid"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
MainWindow.xaml.cs
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
namespace WpfFilesDataGrid
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var data_grid = new DataGrid()
{
IsReadOnly = true,
AutoGenerateColumns = false,
ItemsSource = new DirectoryInfo(@"c:\windows").GetDirectories()
};
{
var setter = new EventSetter()
{
Event = Hyperlink.ClickEvent,
Handler = (RoutedEventHandler)((sender, e) =>
{
System.Diagnostics.Process.Start((data_grid.SelectedItem as DirectoryInfo).FullName);
})
};
var style = new Style();
style.Setters.Add(setter);
var col = new DataGridHyperlinkColumn()
{
Header = "FullName",
Binding = new Binding("FullName"),
ElementStyle = style
};
data_grid.Columns.Add(col);
}
data_grid.Columns.Add(new DataGridTextColumn()
{
Header = "CreationTime",
Binding = new Binding("CreationTime")
});
var dock_panel = new DockPanel();
dock_panel.Children.Add(data_grid);
Content = dock_panel;
}
}
}