2016-09-25 9 views
0

現在、WPFを使用してMIPSエミュレータを作成しようとしています。WPFで名前を使用してcodebehindで作成されたコントロールを見つける方法

registerListと呼ばれるスタックパネルコントロールでは、私は2つのテキストブロック(R0〜R31という名前の2番目のテキストブロック)を含む32個のスタックパネル(C0〜C31)を作成しました。

Iは、最初は、[i]は正しくdisplayRegisters()Iが作成方法を用いProcesor.RegisterBank.Registersに含まれる32個のレジスタを表示します。

Procesor.RegisterBankというクラスに含まれる値で、2番目のテキストブロックの32個の値をすべて更新する方法を作成しました。

ただし、この方法を使用しようとすると、プロジェクトを開始するときにGUIページが表示されません。

私は何時間もこれに固執しており、スタックパネルをコードで作成しないことをほとんど考慮しています。あなたが新しく追加されたControlが親コントロールのNameScopeの一部とすることができるように、RegisterName()を使用する必要が

おかげ

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

は、あなたのdisplayRegister()方法で最後に次の行を追加します。ほぼ。あなたはそれを正しくやっているとほとんど考えましたが、それは簡単すぎます。 winformsを使用するか、WPFを適切に使用することをお勧めします。 winformsとしてWPFを使用しようとすると、苦痛に終わります。 –

答えて

0

。 "ほとんどのコードを経由してスタックパネルを作成していない考慮。"

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

関連する問題