2017-03-19 3 views
0

코드 숨김으로 격자에 추가 된 스택 패널의 Loaded 이벤트에서 생성 된 레이블이 있습니다. 내 질문은 내가 틱 기능에서 레이블을 어떻게 처리합니까?dispatchtimer의 Tick 이벤트에서 codebehind로 만든 레이블을 주소 지정하는 방법

는이 같은 XPath는 함께 레이블을 선택하는 방법에 대한 생각 : XPATH = // 라벨 [1] 또는

그리고 ID 아래의 예와 같이 이름을 추가하는 것은 정말 솔루션에서 XAML에서 레이블을 유지하려면

private int GridRow = 2; 
private int GridColumn = 2; 

      public GameWindow() 
      { 

      InitializeComponent(); 

      Grid TheGrid = GameGridOfficial; 

      for(var rij = 0; rij < 5; rij++) 
      { 
       GridColumn = 2; 

       for(var kolom = 0; kolom < 2; kolom++) 
       { 
        StackPanel sp = new StackPanel(); 
        sp.SetValue(Grid.RowProperty, GridRow); 
        sp.SetValue(Grid.ColumnProperty, GridColumn); 
        sp.SetValue(Grid.RowSpanProperty, 2); 
        sp.SetValue(Grid.ColumnSpanProperty, 2); 

        sp.HorizontalAlignment = HorizontalAlignment.Center; 
        sp.VerticalAlignment = VerticalAlignment.Center; 
        sp.Loaded += Sp_Loaded; 
        TheGrid.Children.Add(sp);      
        GridColumn += 2; 
       } 
       GridRow += 2; 
      } 

     DispatcherTimer timer = new DispatcherTimer(); 
     timer.Interval = TimeSpan.FromSeconds(1); 
     timer.Tick += timer_Tick; 
     timer.Start(); 

     } 

     private void Sp_Loaded(object sender, RoutedEventArgs e) 
     { 

     StackPanel sp = new StackPanel(); 
     if (sender is StackPanel) 
      sp = (StackPanel)sender; 

     Label labelTimer = new Label(); 
     labelTimer.Width = GridOfficial.ColumnDefinitions[3].ActualWidth/2; 
     labelTimer.Height = GridOfficial.RowDefinitions[2].ActualHeight; 
     labelTimer.Content = "00:00:00"; 
     labelTimer.FontFamily = new FontFamily("Impact"); 
     labelTimer.FontSize = 32; 
     labelTimer.Background = new SolidColorBrush(Colors.Aquamarine); 
     labelTimer.HorizontalContentAlignment = HorizontalAlignment.Center; 
     labelTimer.VerticalContentAlignment = VerticalAlignment.Center; 
     labelTimer.Name = "labelTickTimer"; 

     sp.Children.Add(labelTimer); 

     } 

     void timer_Tick(object sender, EventArgs e) 
     { 
      labelTickTimer.Content = DateTime.Now.ToLongTimeString(); 
     } 

분명히 찾을 수없는 labelTickTimer입니다.

희망 정보와 코드로 충분합니다. 나는 최근에 혼자만의 레인저를 지냈고, 계속해서 인터넷 검색을 계속하고있다. & C# 프로그래밍 과정.

인사말 (GridRow` '와 함께) 클래스 범위

+0

선언'라벨 labelTimer' 아니라 지정된 이름 ('labelTimer' 대 "labelTickTimer")에서, 변수 이름하여 참조. 또는'Controls' 트리에서 이름으로 찾아보십시오. – dlatikay

+0

고마워요! 첫 번째 솔루션은 완벽하게 작동했습니다. :) –

답변

0
private int GridRow = 2; 
private int GridColumn = 2; 
Label labelTimer=null; 

     public GameWindow() 
     { 

     InitializeComponent(); 

     Grid TheGrid = GameGridOfficial; 

     for(var rij = 0; rij < 5; rij++) 
     { 
      GridColumn = 2; 

      for(var kolom = 0; kolom < 2; kolom++) 
      { 
       StackPanel sp = new StackPanel(); 
       sp.SetValue(Grid.RowProperty, GridRow); 
       sp.SetValue(Grid.ColumnProperty, GridColumn); 
       sp.SetValue(Grid.RowSpanProperty, 2); 
       sp.SetValue(Grid.ColumnSpanProperty, 2); 

       sp.HorizontalAlignment = HorizontalAlignment.Center; 
       sp.VerticalAlignment = VerticalAlignment.Center; 
       sp.Loaded += Sp_Loaded; 
       TheGrid.Children.Add(sp);      
       GridColumn += 2; 
      } 
      GridRow += 2; 
     } 

    DispatcherTimer timer = new DispatcherTimer(); 
    timer.Interval = TimeSpan.FromSeconds(1); 
    timer.Tick += timer_Tick; 
    timer.Start(); 

    } 

    private void Sp_Loaded(object sender, RoutedEventArgs e) 
    { 

    StackPanel sp = new StackPanel(); 
    if (sender is StackPanel) 
     sp = (StackPanel)sender; 

    labelTimer = new Label(); 
    labelTimer.Width = GridOfficial.ColumnDefinitions[3].ActualWidth/2; 
    labelTimer.Height = GridOfficial.RowDefinitions[2].ActualHeight; 
    labelTimer.Content = "00:00:00"; 
    labelTimer.FontFamily = new FontFamily("Impact"); 
    labelTimer.FontSize = 32; 
    labelTimer.Background = new SolidColorBrush(Colors.Aquamarine); 
    labelTimer.HorizontalContentAlignment = HorizontalAlignment.Center; 
    labelTimer.VerticalContentAlignment = VerticalAlignment.Center; 
    labelTimer.Name = "labelTickTimer"; 

    sp.Children.Add(labelTimer); 

    } 

    void timer_Tick(object sender, EventArgs e) 
    { 
     labelTimer.Content = DateTime.Now.ToLongTimeString(); 
    }