Dinamically生成一个按钮来打开文件对话框并使用WPF控件和C#选择文件

时间:2016-01-19 18:19:32

标签: c# wpf visual-studio-2013

基本上我正在创建一个程序,允许您通过按下按钮将另一个堆叠面板添加到具有多个水平对齐文本框的堆栈面板。到目前为止,一切都按照意图进行。这是我的代码到目前为止,Stacker是父stackpanel的名称,它从空开始:

    private void Add_Click(object sender, RoutedEventArgs e)
    {
        Stacker.Children.Add(NewXD(Stacker.Children.Count + 1));
    }
    public System.Windows.Controls.StackPanel NewXD(int XD)
    {
        System.Windows.Controls.StackPanel NewP = new StackPanel();
        NewP.Orientation = Orientation.Horizontal;
        System.Windows.Controls.TextBox HAHA = new TextBox();
        HAHA.Name = "question" + XD.ToString();
        //HAHA.Text = HAHA.Height.ToString()+" "+HAHA.Width.ToString();
        HAHA.Height = Double.NaN;
        HAHA.Width = 120;
        HAHA.FontSize=20;
        NewP.Children.Add(HAHA);

        for (int i = 1; i < 6; i++)
        {
            System.Windows.Controls.TextBox newBox = new TextBox();

            newBox.Name = "answer"+XD.ToString()+"_"+i.ToString();
            newBox.Height = Double.NaN;
            newBox.Width = 120;

            NewP.Children.Add(newBox);
        }
        System.Windows.Controls.ComboBox correct = new ComboBox();
        correct.Name = "correct" + XD.ToString();
        for (int i = 1; i < 6; i++)
        {
            System.Windows.Controls.ComboBoxItem newItem = new ComboBoxItem();
            newItem.Name = "ans" + XD.ToString() + "_" + i.ToString();
            newItem.Content = i.ToString();
            correct.Items.Add(newItem);
        }
        NewP.Children.Add(correct);
            return NewP;
    }

我为某些代码中缺乏严肃性而道歉。

现在,我需要做的是让子堆栈面板还包含独立的文件选择器,其工作方式类似于此线程中采样的文件选择器:Open file dialog and select a file using WPF controls and C#

我不知道如何执行的是这些生成的按钮中的每一个都具有相同的基本功能,但是与每个相应的文本框相关联。

提前致谢:)

编辑:当我写这篇文章时,我发现也许我可以使用子stackpanel的类似数组属性的帮助来选择相应的文本框,因为文件选择器的文本框和按钮将始终是最后两个项目stackpanel,但我不太清楚如何执行此操作。

1 个答案:

答案 0 :(得分:0)

对于功能,您可以创建将分配给每个按钮的EventHandler。然后,您的事件处理程序将打开File Dialog ...

按钮具有Tag属性,您可以使用该属性来标识TextBoxes,或者您可以从Button类派生并添加 AssociatedTextBox 属性。 / p>