2016-09-25 80 views
0

我目前正在嘗試使用WPF創建MIPS模擬器。如何在WPF中使用名稱查找代碼隱藏創建的控件

在稱爲registerList的堆棧面板控件中;我創建了32個堆棧面板(名爲C0到C31),每個面板包含2個文本塊(第二個文本塊名爲R0到R31)。

我最初顯示包含在Procesor.RegisterBank.Registers [I]正確使用displayRegisters的32個寄存器()方法我創建。

我做了一個方法來更新第二個文本塊的所有32個值,這個值包含在一個名爲Procesor.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); 
     } 
    } 
} 
+0

「幾乎不考慮通過創建代碼堆棧面板。」幾乎。你幾乎認爲這樣做是對的,但這太容易了。我建議你要麼使用winforms,要麼正確使用WPF。嘗試使用WPF作爲winforms在痛苦中結束。 –

回答

0

你必須使用RegisterName(),使新加入的Control可以父控件的NameScope的一部分。

添加這些行末在displayRegister()方法:

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

相關問題