Используйте объект ShellFile с помощью Windows API Code Pack для Microsoft - PullRequest
0 голосов
/ 28 октября 2011

Windows API Code Pack для Microsoft можно загрузить с здесь . Это действительно хорошая библиотека, и в ней есть отличные примеры. Например, если я открою решение WindowsAPICodePack10, которое входит в zip, после загрузки пакета кода (оно содержит только библиотеки, в которые я добавил формы win и приложение wpf)

enter image description here

тогда я могу очень легко использовать библиотеку, например, в моем приложении wpf я могу перетащить:

enter image description here

Пользовательский элемент управления ExplorerBrowser (обратите внимание, я должен добавить ссылки на библиотеки, поставляемые с решением)

и затем с помощью кнопки я могу заполнить этот элемент управления следующими строками кода:

        // Create a new CommonOpenFileDialog to allow users to select a folder/library
        CommonOpenFileDialog cfd = new CommonOpenFileDialog();

        // Set options to allow libraries and non filesystem items to be selected
        cfd.IsFolderPicker = true;
        cfd.AllowNonFileSystemItems = true;

        // Show the dialog
        CommonFileDialogResult result = cfd.ShowDialog();

        // if the user didn't cancel
        if (result == CommonFileDialogResult.Ok)
        {
            // Update the location on the ExplorerBrowser
            ShellObject resultItem = cfd.FileAsShellObject;
            explorerBrowser1.NavigationTarget = resultItem;
            //explorerBrowser1.Navigate(resultItem);
        }

и после этого я могу получить что-то вроде:

enter image description here

Это удивительно, но я не понимаю Microsoft. Если они предоставляют вам эти библиотеки, они должны упростить настройку этого пользовательского элемента управления. причина, по которой я скачал эти библиотеки, заключается в том, что мне нужно поместить файлы из определенного каталога на панель стека и иметь возможность использовать те же функции, что и файлы в проводнике (возможность перетаскивать файлы, получать контекстное меню при щелчке правой кнопкой мыши по файлу, удаление файлов в этот контейнер и т. д.)

В любом случае мне не нужны все эти функции. Из изучения библиотеки я думаю, что пользовательский элемент управления содержит объект ShellContainer, и, возможно, он является ShellFiles.

Итак, из этой библиотеки я хотел бы создать объект ShellFile и поместить его в StackPanel. после утомительного изучения библиотеки я наконец узнал, как создать экземпляр объекта из shellFile (класс ShellFile является абстрактным):

string filename = @"C:\Program Files (x86)\FileZilla FTP Client\filezilla.exe"; \\random file
ShellFile shellFile = ShellFile.FromFilePath(filename);

теперь было бы хорошо, если бы я мог поместить этот файл в контейнер. Я не могу создать экземпляр объекта ShellConteiner, потому что он тоже абстрактный. так как я смогу разместить этот файл оболочки на холсте, например?

или, может быть, я мог бы извлечь нужные мне свойства и создать пользовательский элемент управления, который будет представлять собой shellFile. Я знаю, как получить эскиз, я могу сделать что-то вроде:

        string filename = @"C:\Program Files (x86)\FileZilla FTP Client\filezilla.exe";

        ShellFile shellFile = ShellFile.FromFilePath(filename);
        System.Drawing.Bitmap btm = shellFile.Thumbnail.ExtraLargeBitmap;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...