0

我不明白为什么这个简单的 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() 导致应用程序冻结..

4

1 回答 1

1

从阅读您的评论看来,MainPage.xaml 中的 XAML 类似于以下内容:

<Grid x:Name="LayoutRoot" Background="White">
    <Button Content="Do stuff" Click="Button_Click" />
</Grid>

TextBlock在代码或 XAML 中添加 后,您实际上会得到以下结果:

<Grid x:Name="LayoutRoot" Background="White">
    <Button Content="Do stuff" Click="Button_Click" />
    <TextBlock Text="TEST" />
</Grid>

Grid没有指定任何ColumnDefinitions 或RowDefinitions,因此您有一个 1 × 1 网格,其中包含Grid给定网格的整个宽度和高度的所有子控件。

由于您Button和您都没有TextBlock指定 z-index 值(使用Canvas.ZIndex),因此它们的 z 顺序由它们在网格中的位置定义Children。TheTextBlock出现在 之后Button,因此它是“在顶部”的那个。

TextBlock可能只包含少量文本,但它本身TextBlock仍会填充Grid. TextBlocks 不会自动调整大小以适应它们包含的文本,仅此而已。您Button似乎不起作用,因为TextBlock它位于它之上并接收所有鼠标事件。 TextBlocks 是静态控件,不会响应任何鼠标事件,这应该可以解释为什么您的应用程序似乎冻结了。

将 的HorizontalAlignment和/或设置VerticalAlignmentTextBlock一个值,而不是Stretch停止TextBlock给定 的整个宽度和高度,Grid并允许Button接收鼠标事件。

于 2013-01-27T11:00:27.443 回答