如何在WPF中使用名称查找由代码隐藏创建的控件



我正在尝试使用WPF创建一个MIPS模拟器。

在名为的堆栈面板控件中,registerList;我创建了32个堆栈面板(名为C0到C31),每个包含2个文本块(第二个文本块名为R0到R31)。

我最初显示了 processor . registerbank中包含的32个寄存器。使用我创建的displayRegisters()方法正确地寄存器[i]

我创建了一个方法来更新第二个文本块的所有32个值,这些值包含在一个名为 processor . registerbank 的类中。

然而,当我尝试使用这种方法时,GUI页面将不会在我启动项目时显示。

我已经被这个问题困扰了好几个小时,几乎考虑不通过代码创建堆栈面板。

感谢
 public partial class MainWindow : Window
{
    MRA.MRA Procesor = new MRA.MRA();
    public MainWindow()
    {
        InitializeComponent();
        displayRegisters();
        Procesor.RegisterBank.registers[1] = 69;
        updateRegisters();
    }
    public void updateRegisters()
    {
        for (int i = 0; i < Procesor.RegisterBank.registers.Length; i++)
        {
            var register = (StackPanel)registerList.FindName("C"+i.ToString());
            var content = (TextBlock)register.FindName("R"+i.ToString());
            content.Text= Procesor.RegisterBank.registers[i].ToString();
        }
    }
    public void displayRegisters()
    {
        for (int i = 0; i < Procesor.RegisterBank.registers.Length; i++)
        {
            var register = new StackPanel { Orientation = Orientation.Horizontal, Background = Brushes.White, Margin = new Thickness(6, 6, 6, 6), MinHeight = 25, Name = "C" + i.ToString() };
            var registerName = new TextBlock { Text = "R"+i.ToString(), FontSize = 16, MinWidth = 30, Background = Brushes.DarkGray, Foreground = Brushes.White};
            var registerValue = new TextBlock { Text = Procesor.RegisterBank.registers[i].ToString(), FontSize = 16, MinWidth = 100, HorizontalAlignment = HorizontalAlignment.Right, Name="R"+i.ToString()};
            register.Children.Add(registerName);
            register.Children.Add(registerValue);
            registerList.Children.Add(register);
        }
    }
}

您必须使用RegisterName(),以便新添加的Control可以成为父控件NameScope的一部分。

displayRegister()方法的末尾添加这些行:

NameScope.SetNameScope(register, new NameScope());register.RegisterName(registerValue.Name, registerValue);registerList.RegisterName(register.Name, register);

相关内容

  • 没有找到相关文章

最新更新