为用户控件中的 wpf 文本框更改 'isenabled'(代码隐藏)
change 'isenabled' for wpf texbox in usercontrol (codebehind)
上下文中的代码
private void button2_Click(object sender, RoutedEventArgs e)
{
edit();
}
public void edit()
{
textBox1.IsEnabled = true;
textBox2.IsEnabled = true;
textBox3.IsEnabled = true;
textBox4.IsEnabled = true;
textBox5.IsEnabled = true;
textBox6.IsEnabled = true;
textBox7.IsEnabled = true;
textBox8.IsEnabled = true;
textBox9.IsEnabled = true;
textBox10.IsEnabled = true;
textBox11.IsEnabled = true;
textBox12.IsEnabled = true;
textBox13.IsEnabled = true;
textBox14.IsEnabled = true;
textBox15.IsEnabled = true;
textBox16.IsEnabled = true;
textBox17.IsEnabled = true;
textBox18.IsEnabled = true;
}
我想使用循环 1-18 的简单 for 循环 执行上述操作。
我尝试了以下方法,但效果不佳
for(i=0;i<19;i++)
{
textBox"" + i + "".IsVisible = true;
}
我是 wpf 的新手,我正在将我的应用程序从 winforms 迁移到 wpf。
创建文本框列表,例如:
var textBoxes = new List<TextBox>();
// 顺便说一句,我手边没有编译器,我假设类型是 TextBox。
填充文本框:
textBoxes.Add(textBox1);
textBoxes.Add(textBox2);
...
textBoxes.Add(textBox18);
这是一次性的手动操作来填充它。之后你可以遍历它们:
foreach (var textBox in textBoxes)
{
textBox.IsVisible = true;
}
或者在带有 foreach 循环(或 for、linq 等)的文本框上使用任何其他 setting/algorithm。
使用绑定。
XAML(我的用户控件):
<UserControl Name="MyControl" ...
....
<TextBox Name="textBox1" IsEnabled="{Binding ElementName=MyControl, Path=AreTextBoxesEnabled}" ... />
<TextBox Name="textBox2" IsEnabled="{Binding ElementName=MyControl, Path=AreTextBoxesEnabled}" ... />
<TextBox Name="textBox3" IsEnabled="{Binding ElementName=MyControl, Path=AreTextBoxesEnabled}" ... />
...
代码隐藏(MyUserControl):
public static readonly DependencyProperty AreTextBoxesEnabledProperty = DependencyProperty.Register(
"AreTextBoxesEnabled",
typeof(bool),
typeof(MyUserControl));
public bool AreTextBoxesEnabled
{
get { return (bool)GetValue(AreTextBoxesEnabledProperty); }
set { SetValue(AreTextBoxesEnabledProperty, value); }
}
只需调用 AreTextBoxesEnabled = true;
即可启用所有文本框。
当然,还有很多其他的方法。但这是通过利用绑定的力量来做到这一点的基本方法(没有 MVVM)。
简单的解决方法(但不推荐)方法很简单:
for (i = 0; i < 19; i++)
{
var tb = this.FindName("textBox" + i.ToString()) as TextBox;
if (tb != null) tb.IsEnabled = true;
}
上下文中的代码
private void button2_Click(object sender, RoutedEventArgs e)
{
edit();
}
public void edit()
{
textBox1.IsEnabled = true;
textBox2.IsEnabled = true;
textBox3.IsEnabled = true;
textBox4.IsEnabled = true;
textBox5.IsEnabled = true;
textBox6.IsEnabled = true;
textBox7.IsEnabled = true;
textBox8.IsEnabled = true;
textBox9.IsEnabled = true;
textBox10.IsEnabled = true;
textBox11.IsEnabled = true;
textBox12.IsEnabled = true;
textBox13.IsEnabled = true;
textBox14.IsEnabled = true;
textBox15.IsEnabled = true;
textBox16.IsEnabled = true;
textBox17.IsEnabled = true;
textBox18.IsEnabled = true;
}
我想使用循环 1-18 的简单 for 循环 执行上述操作。
我尝试了以下方法,但效果不佳
for(i=0;i<19;i++)
{
textBox"" + i + "".IsVisible = true;
}
我是 wpf 的新手,我正在将我的应用程序从 winforms 迁移到 wpf。
创建文本框列表,例如:
var textBoxes = new List<TextBox>();
// 顺便说一句,我手边没有编译器,我假设类型是 TextBox。
填充文本框:
textBoxes.Add(textBox1);
textBoxes.Add(textBox2);
...
textBoxes.Add(textBox18);
这是一次性的手动操作来填充它。之后你可以遍历它们:
foreach (var textBox in textBoxes)
{
textBox.IsVisible = true;
}
或者在带有 foreach 循环(或 for、linq 等)的文本框上使用任何其他 setting/algorithm。
使用绑定。
XAML(我的用户控件):
<UserControl Name="MyControl" ...
....
<TextBox Name="textBox1" IsEnabled="{Binding ElementName=MyControl, Path=AreTextBoxesEnabled}" ... />
<TextBox Name="textBox2" IsEnabled="{Binding ElementName=MyControl, Path=AreTextBoxesEnabled}" ... />
<TextBox Name="textBox3" IsEnabled="{Binding ElementName=MyControl, Path=AreTextBoxesEnabled}" ... />
...
代码隐藏(MyUserControl):
public static readonly DependencyProperty AreTextBoxesEnabledProperty = DependencyProperty.Register(
"AreTextBoxesEnabled",
typeof(bool),
typeof(MyUserControl));
public bool AreTextBoxesEnabled
{
get { return (bool)GetValue(AreTextBoxesEnabledProperty); }
set { SetValue(AreTextBoxesEnabledProperty, value); }
}
只需调用 AreTextBoxesEnabled = true;
即可启用所有文本框。
当然,还有很多其他的方法。但这是通过利用绑定的力量来做到这一点的基本方法(没有 MVVM)。
简单的解决方法(但不推荐)方法很简单:
for (i = 0; i < 19; i++)
{
var tb = this.FindName("textBox" + i.ToString()) as TextBox;
if (tb != null) tb.IsEnabled = true;
}