我正在编写一个WPF程序,它涉及某人输入一个数字,并启用相应数量的文本框。目前我有一个系统可以检查每个文本框,例如
private void navnumbox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
if (Int32.Parse(navnumbox.Text) > 0)
{
One.IsEnabled = true;
}
if (Int32.Parse(navnumbox.Text) > 1)
{
Two.IsEnabled = true;
}
}
}
我想把它放到一个循环中,我认为我可能需要将One和Two存储在一个数组中,但我已经尝试但我不知道如何访问它们
答案 0 :(得分:2)
也许你可以尝试这样的事情(我无法测试对不起)。
private void navnumbox_TextChanged(object sender, TextChangedEventArgs e)
{
var textBoxesMap = new Dictionary<int,TextBox>()
{
{1, One},
{2, Two}
// etc
};
try
{
int number = int.Parse(navnumbox.Text)
foreach(var item in textBoxesMap)
{
if(item.Key <= number)
{
item.Value.IsEnabled = true;
}
}
}
}
显然,您可以将地图放在其他地方。另一种(也是更好的)方法是使用XAML - 这个问题还有另一个答案,说明了如何做到这一点。
答案 1 :(得分:2)
我认为更好的方法是通过ElementBinding将TextBoxes One和Two的Converter for Visibility属性用于navnumbox Path = Text。
我是你的情况,你需要单独的TextBox.Enable转换器用于TextBoxes One和Two。
这里是窗口的XAML:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfApplication2="clr-namespace:WpfApplication2"
Title="MainWindow"
Height="350"
Width="525">
<Window.Resources>
<wpfApplication2:MyConverter x:Key="MyConverter"></wpfApplication2:MyConverter>
</Window.Resources>
<Grid>
<StackPanel>
<TextBox x:Name="MyText"></TextBox>
<TextBox IsEnabled="{Binding ElementName=MyText, Path=Text, Converter={StaticResource MyConverter}}"></TextBox>
</StackPanel>
</Grid>
</Window>
这里实现了针对TexBox的转换器“One”
public class MyConverter
: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string myValue = value as string;
int result = 0;
if (myValue != null)
{
int.TryParse(myValue,out result);
}
return result > 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// not relevant for your application
throw new NotImplementedException();
}
}