WPF C# 输入框 [英] WPF C# InputBox
问题描述
我正在使用 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屋!