2017-07-31 87 views
1

我有一个StackPanel有2个孩子,我需要根据StackPanel的大小调整大小。我在StackPanelSizeChanged附加了一个事件处理程序,并在那里调整元素的大小。问题是事件处理程序被一次又一次地触发,直到应用程序崩溃。这是怎么回事?调整儿童大小时在StackPanel中的UWP布局周期

class BasicStatusTile : StackPanel { 

     private TextBlock TopText { get; set; } 
     private TextBlock BottomText { get; set; } 

     public BasicStatusTile() { 
      InitializeComponent(); 
     } 

     private void InitializeComponent() { 

      TopText = new TextBlock() { 
       Text = "0", 
       HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Stretch, 
       TextAlignment = Windows.UI.Xaml.TextAlignment.Center, 
       FontSize = 48 
      }; 

      BottomText = new TextBlock() { 
       Text = "Speed (km/h)", 
       HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Stretch, 
       VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom, 
       TextAlignment = Windows.UI.Xaml.TextAlignment.Center 
      }; 

      base.Children.Insert(0, TopText); 
      base.Children.Insert(1, BottomText); 
      base.Background = new SolidColorBrush(Colors.White); 

      base.SizeChanged += BasicStatusTile_SizeChanged; 

     } 

     private void BasicStatusTile_SizeChanged(object sender, Windows.UI.Xaml.SizeChangedEventArgs e) { 

      double third = base.ActualHeight/6; 

      TopText.FontSize = third * 4; 
      BottomText.FontSize = third; 

     } 

    } 
+0

'StackPanel'应该是一个主持人,你把所有的UI元素。你不应该这样扩展它。这里应该使用'UserControl'。 –

回答

2

发生这种情况是因为您更改了TextBlock的FontSize。它触发自定义StackPanel的sizechanged事件。 你应该考虑你需要什么样的控制。 你使用sizechanged事件的自定义堆栈面板的目的是什么?

而且,字号是不一样的TextBlock的高度

+1

我最终做了@Justin XL建议的事情,子类化'UserControl'。 – Gala