rksoftware

Visual Studio とか C# とかが好きです

WPF で OpenFolderDialog

皆さん .NET 8 使っていますか? 使っていますよね? 知っています。皆さん使っています。

■ .NET 8 の WPF の新機能 OpenFolderDialog

learn.microsoft.com

learn.microsoft.com

.NET 8 で WPF で OpenFolderDialog が使えるそうです。
皆さん WPF で OpenFolderDialog 使いたかったですよね? 私は使いたかったです。何度自作したか......。

■ 試してみます。

試してみます。

<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content="Button" Click="Button_Click"/>
    </Grid>
</Window>
using System.Windows;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFolderDialog ofd = new Microsoft.Win32.OpenFolderDialog {InitialDirectory= @"C:\sample", FolderName = "cs12" };
            MessageBox.Show(ofd.ShowDialog() == true ? ofd.FolderName : "キャンセルされました.");
        }
    }
}

実行してみます。

でました!

■ 暗黒の儀式

かつてはこんな闇の技術もありましたが、完全に闇に飲みさせることができるようになりますね!
「フォルダーの参照」より「フォルダーの選択」の方が使いやすいですし!

using System.Windows;

namespace WpfApp3
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog { SelectedPath = @"C:\sample\cs12" };
            MessageBox.Show(fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK ? fbd.SelectedPath : "キャンセルされました.");

        }
    }
}

WPF で Forms の dll 禁止のプロフジェクトに、このコードが書かれたソースコードが混入してします事件ともさらば!