WPF C# 输入框 [英] WPF C# InputBox

查看:19
本文介绍了WPF C# 输入框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 C# 构建 WPF 应用程序.我想弹出一个对话框来提示用户输入他/她的名字.之后,我将跟踪名称并使用名称将一些数据保存到 .txt 文件中.

I am building a WPF application using C#. I want to pop out a dialog box to prompt the user to enter his/her name. After that, I will keep track of the name and save some data into a .txt file using the name.

例如:

名称输入是
姓名 = 约翰"

Name input is
name = "John"

所以我有数据
数据=1、2、3";

And so I have data
data="1, 2, 3";

然后我保存数据"在 John.txt 文件中.

and then I save the "data" in John.txt file.

有人知道怎么做吗?

我认为问题是如何弹出一个对话框让用户输入姓名.

推荐答案

我更喜欢使用不会锁定应用程序的对话框的方法,并且远离更传统的 Win32 对话框.

I prefer to take an approach using dialogs that doesn't lock up the application, and moves away from the more traditional Win32 Dialog.

示例

输入对话框隐藏

在本例中,我使用基于 MVVM 的解决方案的简化版本,用于我的应用程序.它可能不太漂亮,但应该能让你对它背后的基础有一个可靠的了解.

In this example I use a simplified version of the MVVM based solution I am using for my applications. It may not be pretty, but should give you a solid idea on the basics behind it.

XAML:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <StackPanel>
        <Button Content="Cool Button" x:Name="CoolButton" Click="CoolButton_Click"/>
        <ListBox x:Name="MyListBox"/>
    </StackPanel>

    <!-- It's important that this is in the end of the XAML as it needs to be on top of everything else! -->
    <Grid x:Name="InputBox" Visibility="Collapsed">
        <Grid Background="Black" Opacity="0.5"/>
        <Border
            MinWidth="250"
            Background="Orange" 
            BorderBrush="Black" 
            BorderThickness="1" 
            CornerRadius="0,55,0,55" 
            HorizontalAlignment="Center" 
            VerticalAlignment="Center">
            <StackPanel>
                <TextBlock Margin="5" Text="Input Box:" FontWeight="Bold" FontFamily="Cambria" />
                <TextBox MinWidth="150" HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="InputTextBox"/>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                    <Button x:Name="YesButton" Margin="5" Content="Yes" Background="{x:Null}" Click="YesButton_Click"/>
                    <Button x:Name="NoButton" Margin="5" Content="No" Background="{x:Null}" Click="NoButton_Click" />
                </StackPanel>
            </StackPanel>
        </Border>
    </Grid>
</Grid>

显示此对话框非常容易,因为您只需将 InputBox 网格的可见性设置为可见.然后,您只需处理 Yes/No 按钮并从 TextBox 获取输入文本.

It's very easy to show this dialog as you only need to set the Visibility of the InputBox grid to visible. You then simply handle the Yes / No buttons and get the Input text from the TextBox.

因此,无需使用需要 ShowDialog() 的代码,只需将 Visibility 选项设置为 Visible.在这个例子中还有一些事情要做,我们将在代码隐藏中处理,例如在处理是/否按钮点击后清除 InputText 框.

So instead of using code that requires ShowDialog(), you simply set the Visibility option to Visible. There are still some things to do in this example that we will handle in code-behind, like for example clearing the InputText box after handling the Yes/No Button clicks.

代码隐藏:

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

        private void CoolButton_Click(object sender, RoutedEventArgs e)
        {
            // CoolButton Clicked! Let's show our InputBox.
            InputBox.Visibility = System.Windows.Visibility.Visible;
        }

        private void YesButton_Click(object sender, RoutedEventArgs e)
        {
            // YesButton Clicked! Let's hide our InputBox and handle the input text.
            InputBox.Visibility = System.Windows.Visibility.Collapsed;

            // Do something with the Input
            String input = InputTextBox.Text;
            MyListBox.Items.Add(input); // Add Input to our ListBox.

            // Clear InputBox.
            InputTextBox.Text = String.Empty;
        }

        private void NoButton_Click(object sender, RoutedEventArgs e)
        {
            // NoButton Clicked! Let's hide our InputBox.
            InputBox.Visibility = System.Windows.Visibility.Collapsed;

            // Clear InputBox.
            InputTextBox.Text = String.Empty;
        }
    }
}

代码隐藏可以使用依赖项轻松完成,或者在这种情况下作为 ViewModel 逻辑,但为了简单起见,我将其保留在代码隐藏中.

The code-behind could easily be done using a Dependency, or as ViewModel logic in this case, but for simplicity I kept it in the code-behind.

这篇关于WPF C# 输入框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆