如何在WPF应用程序中设置默认值
本文关键字:设置 默认值 应用程序 WPF | 更新日期: 2023-09-27 18:22:46
我是WPF的新手,也是C#的新手,我正在遵循Head First C#第二版第218页(但这是WPF版本,而不是WinForms版本)。我的表单上有一个TextBox
,我希望在加载表单时显示一个默认字符串。我有两个问题:
-
如果我在XAML代码中设置了
Text
属性,那么TextChanged
事件将在表单加载时触发,我将得到一个NullReferenceException
。这是我的XAML片段:<TextBox Name="cakeWritingText" Text="Happy Birthday" TextChanged="cakeWritingText_TextChanged" />
-
如果我改为在代码中设置值(并删除XAML
Text
属性),如下所示:cakeWritingText.Text = "Happy Birthday";
,则会出现以下错误:
没有为任何调用堆栈帧加载任何符号。无法显示源代码。
以下是完整的事件处理程序:
private void cakeWritingText_TextChanged(object sender, TextChangedEventArgs e)
{
birthdayParty.CakeWriting = cakeWritingText.Text;
DisplayBirthdayPartyCost();
}
MainWindow
构造函数
public MainWindow()
{
InitializeComponent();
dinnerParty = new DinnerParty(5, (bool)healthyCheckBox.IsChecked, (bool)fancyCheckBox.IsChecked);
DisplayDinnerCost();
birthdayParty = new BirthdayParty(5, (bool)fancyBdayCheckBox.IsChecked, cakeWritingText.Text);
numPeopleBdayUpDown.Value = 5;
cakeWritingText.Text = "Happy Birthday";
DisplayBirthdayPartyCost();
}
在TextBox
中放置默认字符串的最佳方式是什么?
设置默认硬编码值的最佳方法是在XAML中,因此您的第一种方法是正确的。该问题出现在TextChanged
事件的事件处理程序中。此事件将在InitializeComponent
内部激发,此时您的birthdayParty
变量将不会被设置,因此NullReferenceException
也会被设置。
要克服这个问题,请在事件处理程序中检查birthdayParty
变量是否已初始化。因此,您的事件处理程序将如下所示:
private void cakeWritingText_TextChanged(object sender, TextChangedEventArgs e)
{
if (birthdayParty == null)
{
return;
}
birthdayParty.CakeWriting = cakeWritingText.Text;
DisplayBirthdayPartyCost();
}
这显然会导致您丢失CakeWriting
属性的第一个设置,因此在初始化变量后,您需要在构造函数中获取该值。
但是,如果希望CakeWriting
属性始终在TextBox
中包含值,请查看WPF数据绑定。这是在WPF内部同步UI和数据模型值的更好方法。还可以阅读这篇关于模型视图视图模型模式的文章,这可能是您想要尝试实现的。
您可以使用解密指定回退值
<TextBox Text="{Binding MyStringProperty,FallbackValue='Not available'}" />
这假设您使用的是数据绑定,就像您采用MVVM设计模式一样,出于这里描述的许多原因,我建议您使用MVVM。