如何从选定的 WPF ComboBox 项 C# 中显示内容

Posted

技术标签:

【中文标题】如何从选定的 WPF ComboBox 项 C# 中显示内容【英文标题】:How to display content from selected WPF ComboBox item C# 【发布时间】:2021-03-11 08:10:02 【问题描述】:

我希望每个人都很好我正在用 C# 和 WPF 构建一个小应用程序,我正在尝试添加一个功能,当单击组合框并选择某个元素时,我想显示文本的内容,但我 似乎做错了。我想就如何解决这个问题提供一些意见,请查看 C# 代码,如果您有解决方案,请发布,谢谢,请注意您可能从代码中看到,我是初学者编码器。提前感谢您的帮助。

namespace WPFDemo

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    
        public MainWindow()
        
            InitializeComponent();
            textToDisplay.IsReadOnly = true;

            SaveFileDialog saveFileDialog = new SaveFileDialog();
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Title = "Import new template";
            openFileDialog.Filter = "Text files (*.txt)|*.txt";
            saveFileDialog.Filter = "Text files (*.txt)|*.txt";
            loadTemplates();
        

        // Load the templates in the directory
        private void loadTemplates()
        
            string[] templates = Directory.GetFiles(@"C:\Users\injanlee\source\repos\WPFDemo\WPFDemo\Snow Templates");
            Array.Sort(Directory.GetFiles(@"C:\Users\injanlee\source\repos\WPFDemo\WPFDemo\Snow Templates"));
            Array.Sort(templates);
            foreach (string template in templates)
            
                //string fileName = template.Split("\\")[5].Split(".")[0];
                string fName = System.IO.Path.GetFileName(template);
                selectOption.Items.Add(fName);
                
            
            
        

        private async Task Sleep(int miliSeconds)
        
            await Task.Delay(miliSeconds);
            myLabel.Content = " ";
        
        

        private async void Submit_Click(object sender, RoutedEventArgs e)
        
            Clipboard.SetText(textToDisplay.Text);

            myLabel.Content = "Copied to clipboard";
            myLabel.Foreground = new SolidColorBrush(Colors.DarkGreen);
            await Sleep(3000);
        

        private void DisplayFileContent(string path)
        
            textToDisplay.Clear();
            try
            
                string[] fileContent = File.ReadAllLines(path);
                foreach (string line in fileContent)
                
                    textToDisplay.Text += line;
                    textToDisplay.Text += "\n";
                
            
            catch
            
                MessageBox.Show($"Unable to find the path for the specific selected File: selectOption.Text");
                
            
            
            
        


        // Import and save new file template
        public void importTemplate_Click(object sender, RoutedEventArgs e)
        
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            OpenFileDialog openFileDialog = new OpenFileDialog();

            saveFileDialog.Title = "Save To";
            openFileDialog.Title = "Import new template";
            openFileDialog.Filter = "Text files (*.txt)|*.txt";
            saveFileDialog.Filter = "Text files (*.txt)|*.txt";

            if (openFileDialog.ShowDialog() == true)
            

                
                string[] fileName = openFileDialog.FileName.Split("\\");
                string importedFileName = fileName[5].Split(".")[0];
                saveFileDialog.FileName = importedFileName;
                

                if (saveFileDialog.ShowDialog() == true)
                
                    string location = saveFileDialog.FileName;
                    File.Copy(openFileDialog.FileName, location, true);
                

                selectOption.Items.Add(fileName[5].Split(".")[0]);
                MessageBox.Show("Impor successfull");
                
                
            
        


        private void selectOption_SelectionChanged(object sender, SelectionChangedEventArgs e)
        
            if (selectOption.SelectedIndex == 0)
            
                DisplayFileContent(@"C:\Users\injanlee\source\repos\WPFDemo\WPFDemo\Snow Templates\Template.txt");
            
           
        


        
    

【问题讨论】:

这段代码遇到了什么问题? 基本上当你在项目列表中选择一个选项时,我想显示文本的内容,除了我不能正确,问题是我不知道如何获取选定的名称项目,例如,如果我选择删除浏览模板项目,我想显示那个.txt文件的内容,现在我知道如何显示它,但我不知道如何动态获取所选项目的名称 一般来说,你做的每件事都是错误的(对我来说太难了)。考虑学习一些关于 WPF 和 MVVM 编程模式中的数据绑定的知识。还将启动代码从 Window 构造函数移动到 Window.Loaded 事件处理程序。简而言之,您可以使用selectOption.SelectedItem 属性来获取所选项目的内容。 提示:单行显示文字:textToDisplay.Text = File.ReadAllText(path) @aepot,非常感谢,过去一周我一直在努力解决这个问题,这是一个简单的 SelectOption.selectedItem。我非常感谢您的帮助,也感谢您提供的提示,我刚刚实施了更改并且效果很好。非常感激。我从你那里学到了很多,谢谢你 【参考方案1】:

@aepot 回答了这个问题:

简而言之,您可以使用selectOption.SelectedItem 属性来获取所选项目的内容。

【讨论】:

以上是关于如何从选定的 WPF ComboBox 项 C# 中显示内容的主要内容,如果未能解决你的问题,请参考以下文章

WPF MVVM 将 ComboBox 绑定到 Datagrid 选定项

WPF IsEditable=true 填充了对象的 ComboBox 将 ToString() 显示为选定项

C# WPF 如何向combobox控件添加类型为comboboxitem的项?

WPF中,ComboBox值显示问题

Windows 10 中的 XAML ComboBox 选定项背景颜色

wpf combobox 使用总出错