我无法理解为什么在这个简单的Silverlight应用程序冻结了。这是代码:
namespace test
{
public partial class MainPage : UserControl
{
TextBlock txtword;
public MainPage()
{
InitializeComponent();
txtword = new TextBlock();
txtword.Text = "TEST";
LayoutRoot.Children.Add(txtword);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
txtword.Text = "SuperDuper";
}
}
}
如果您尝试悬停或单击按钮将文本块添加到layoutroot后,您可以告诉应用程序由于某种原因已冻结。知道这里发生了什么吗?
如果我在XAML中添加文本块,我可以在按钮单击中更改其文本属性。 LayoutRoot.Children.Add()导致应用程序冻结..
答案 0 :(得分:1)
从阅读你的评论看来,MainPage.xaml中的XAML似乎如下:
<Grid x:Name="LayoutRoot" Background="White">
<Button Content="Do stuff" Click="Button_Click" />
</Grid>
在代码或XAML中添加TextBlock
后,您最终会得到以下结果:
<Grid x:Name="LayoutRoot" Background="White">
<Button Content="Do stuff" Click="Button_Click" />
<TextBlock Text="TEST" />
</Grid>
您的Grid
未指定任何ColumnDefinition
或RowDefinition
s,因此您拥有1×1网格,其中包含Grid
的所有子控件网格的宽度和高度。
由于Button
和TextBlock
都没有指定z-index值(使用Canvas.ZIndex
),因此他们的z顺序是由他们在网格Children
中的位置定义的。 TextBlock
位于Button
之后,因此它位于“顶部”。
TextBlock
可能只包含少量文字,但TextBlock
本身仍会填充Grid
。 TextBlock
不会自动调整大小以适应它们包含的文本而不会其他任何内容。您的Button
似乎无法正常工作,因为TextBlock
位于其顶部并接收所有鼠标事件。 TextBlock
是静态控件,不会响应任何鼠标事件,这可以解释为什么您的应用似乎会冻结。
将HorizontalAlignment
的{{1}}和/或VerticalAlignment
设置为TextBlock
以外的值可以阻止Stretch
获得整个宽度和高度TextBlock
并允许Grid
接收鼠标事件。