WPF中的自定义OpenDialogBox

时间:2014-07-14 17:55:47

标签: wpf openfiledialog

我是WPF和C#框架的新手。我有一个要求,用户必须选择.txt文件,除此之外,他/她必须能够选择另外两个选项(TextBox和单选按钮)。有没有一种简单的方法可以使用OpenFileDialog做到这一点?

private void Import_Click(object sender, RoutedEventArgs e)
        {
            //open a browser for .txt files
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.DefaultExt = ".txt";
            dlg.Filter = "Text Files(*.txt)|*.txt";

            Nullable<bool> result = dlg.ShowDialog();            

            if (result == true)
            {
                if (File.Exists(dlg.FileName))
                {
                    MessageBox.Show("Choose Options", "Choose different options before proceeding");
                    // Add Text box option here
                    // Add Radio button option here
                    }
                }            
        }

1 个答案:

答案 0 :(得分:1)

您可以创建一个Window类型的模态窗口:
http://msdn.microsoft.com/en-us/library/system.windows.window(v=vs.110).aspx
并使用Window.OpenDialog将其打开为模态对话框:
http://msdn.microsoft.com/en-us/library/system.windows.window.showdialog.aspx

在xaml中以这种方式创建的窗口中,您需要像上面那样添加用于打开OpenFileDialog的按钮,以及所有其他控件,这样您至少可以将它分开一个视图。不幸的是,它并没有很好地定制,也没有使用WPF样式。

这是一个简单的xaml脚手架,可以作为OpenFileDialog按钮的包装器:

    <Window x:Class="WpfApplication2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBox Margin="4"/>
            <Button Grid.Column="1" Content="..." MinWidth="40" MinHeight="40" Name="Button1"/>
            <RadioButton Content="Radio1" Grid.Row="1"/>
        </Grid>
    </Window>     

另一种方法是构建整个OpenFileDialog功能 - 或者至少从上面提到的方式开始,只是没有OpenFileDialog和手工制作的所有OpenFileDialog控件。