在用户控制(代码隐藏)中更改 WPF Texbox 的“已启用”

本文关键字:Texbox WPF 已启用 启用 控制 用户 代码 隐藏 | 更新日期: 2023-09-27 17:56:49

上下文中的代码

    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;
    }

我想使用一个简单的 for 循环来执行上述操作,该循环遍历 1-18。

我已经尝试了以下方法,但没有按预期工作

    for(i=0;i<19;i++)
    {
          textBox"" + i + "".IsVisible = true;
    }

我是 wpf 的新手,我正在将我的应用程序从 winforms 迁移到 wpf。

在用户控制(代码隐藏)中更改 WPF Texbox 的“已启用”

使用绑定。

XAML (MyUserControl):

<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;
}

创建文本框列表,如下所示:

var textBoxes = new List<TextBox>();

顺便说一句,我没有手动编译器,我假设类型是文本框。

填写文本框:

textBoxes.Add(textBox1);
textBoxes.Add(textBox2);
...
textBoxes.Add(textBox18);

这是填充它的一次性手动操作。之后,您可以遍历它们:

foreach (var textBox in textBoxes)
{
    textBox.IsVisible = true;
}

或者在带有 foreach 循环(或 for、linq 等)的文本框上使用任何其他设置/算法。