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";
    }

}
}

テキストブロックがレイアウトルートに追加された後、ホバーまたはボタンをクリックしようとすると、何らかの理由でアプリがフリーズしたことがわかります。ここで何が起こっているのか分かりますか??

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>

sまたはsGridが指定されていないため、指定されたグリッドの幅と高さ全体のすべての子コントロールを持つ 1 × 1 グリッドがあります。ColumnDefinitionRowDefinitionGrid

あなたButtonもあなたもTextBlock( を使用して) z-index 値を指定していないCanvas.ZIndexため、z オーダーはグリッドの 内の位置によって定義されますChildren。はのTextBlock後に来るButtonので、「上」にあるものです。

にはTextBlockごく少量のテキストしか含まれていない場合がありますが、TextBlockそれ自体はGrid. TextBlockは、含まれるテキストに合わせて自動的にサイズ変更されることはありません。がその上にあり、すべてのマウス イベントを受け取る ためButton、動作していないように見えます。s は、マウス イベントに応答して何もしない静的コントロールです。これにより、アプリがフリーズしているように見える理由が説明されます。TextBlockTextBlock

HorizontalAlignmentのおよび/またはVerticalAlignmentTextBlock以外の値に設定すると、 の幅と高さ全体が指定されなくStretchなり、はマウス イベントを受け取ることができます。TextBlockGridButton

于 2013-01-27T11:00:27.443 に答える