首页 > 解决方案 > 填充营地后的 WPF 操作

问题描述

我对 c# 很陌生,尤其是对于带有接口的应用程序。我查看了示例或指南,WPF但它们太简单了。这是我要做的:

1)一个按钮来浏览目录和选择文件;

2) aListbox和 atextBox将使用先前选择的文件名的信息填充;

3) 仅在填写时才通过网络信息重命名这些Listbox文件textbox

第 1) 点和第 2) 点已完成:我在单击按钮事件中编写了必要的代码。我正在考虑在里面为第 3 点编写代码,MainWindow但是这些代码行是在我可以选择文件之前执行的,然后还没有任何数据。

简单的解决方案可能是将其余代码也插入到单击按钮事件中,但我认为这很可怕。目前我无法理解在WPF应用程序的 MAIN 中写什么。代码是:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void webLink_Click(object sender, RoutedEventArgs e)
    {
        System.Diagnostics.Process.Start("http://www.battlecraft.it/");
    }

    private void loader_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Multiselect = true;
        ofd.ShowDialog();
        listBox1.Items.Clear();
        string[] files = ofd.FileNames;
        string[] filenames = new string[files.Length];
        for (int i=0; i<files.Length; i++)
        {
            filenames[i] = System.IO.Path.GetFileNameWithoutExtension(files[i]);
            listBox1.Items.Add(filenames[i]);
        }
        if (listBox1.Items.Count != 0)
        {
            string SeEp = Regex.Match(filenames[0], @"\d+\w\d+").Value;
            string[] str = Regex.Split(filenames[0], @"\d\d\w+\d\d");
            string titolo = str[0].Replace(".", " ");

            MatchCollection m = Regex.Matches(SeEp, @"\d\d");
            titleBox.Text = titolo;
            seasonBox.Text = "stagione " + m[0].Value;
            int episode = int.Parse(m[1].Value);
        }
    }
}

标签: c#wpf

解决方案


我刚刚学习了绑定的概念,这应该可以解决我的问题。将 startBtn 的 IsEnabled 属性绑定到 listbox1 和 listbox2 的 Length 应该在它们为空时禁用按钮,否则启用它。

我只在 startBtn 和 listbox1 之间创建了一个简单的绑定,如下所示:

<Button x:Name="startBtn" Content="Rinomina" HorizontalAlignment="Left" Margin="255,79,0,0" VerticalAlignment="Top" Width="75" Height="36" IsEnabled="{Binding ElementName=listBox1, Path=Text.Length}"/>

它无需在 c# 中添加任何代码行即可工作。我应该使用 MultiBinding 但我无法理解传递 2 个文本框的语法。是否也可以不使用c#编写任何代码?


推荐阅读