ファイラーその2
ListBoxItemのダブルクリックイベントを実装する。
MainWindow.xaml
<ListBox Name="currentFolderFiles" ItemsSource="{Binding Path=Files}"> <ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <EventSetter Event="MouseDoubleClick" Handler="listBoxItem_DoubleClick" /> </Style> </ListBox.ItemContainerStyle> </ListBox>
MainWindow.xaml.cs
public partial class MainWindow : Window { private FileView fileView_ = new FileView("C:\\"); public MainWindow() { InitializeComponent(); DataContext=fileView_; } private void listBoxItem_DoubleClick(object sender, MouseButtonEventArgs args) { var item = sender as ListBoxItem; var directory = item.Content as DirectoryInfo; if (directory != null) { fileView_.Current=directory; return; } var file = item.Content as FileInfo; if(file != null) { return; } } }
FileView.cs
private DirectoryInfo current_; // 追加 public DirectoryInfo Current { get { return current_; } set { current_ = value; NotifyPropertyChanged("Current"); NotifyPropertyChanged("Path"); /* 入れ物が変わってしまう・・・ files_ = new ObservableCollection<FileSystemInfo>( current_.GetFileSystemInfos().ToArray()); */ files_.Clear(); foreach (var e in current_.GetFileSystemInfos()) { files_.Add(e); } } } public string Path { get { return current_.FullName; } set { Current = new DirectoryInfo(value); } }
ディレクトリの上に来たらマウスカーソルを変える
MainWindow.xaml
<DataTemplate DataType="{x:Type IO:DirectoryInfo}"> <Label Content="{Binding Path=Name}" Foreground="#FF2222" Cursor="Hand"/> </DataTemplate>
横いっぱいに広げる
<ListBox x:Name="currentFolderFiles" ItemsSource="{Binding Path=Files}" HorizontalContentAlignment="Stretch">
親ディレクトリに戻るボタン
MainWindow.xaml
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <TextBox Grid.Column="0" Name="currentFolder" Text="{Binding Path=Path}" /> <Button Grid.Column="1" Name="goParent" Width="30" Content=".." Click="goParent_Click" Cursor="Hand"/> </Grid>
立て分割のGridに、横分割のGridを入れ子にした
MainWindow.xaml.cs
private void goParent_Click(object sender, RoutedEventArgs e) { if (fileView_.Current.Parent != null) { fileView_.Current = fileView_.Current.Parent; } }