1

私はこの機能を持っています:

void Title(string t)
    {
        if (called == true)
        {
            GrdLogo.Children.Remove((TextBlock)GrdLogo.FindName("Tb"));

        }

            TextBlock Tb = new TextBlock();
            Tb.Text = t;
            Tb.Name = "Tb";


            Tb.Height = 160;
            Tb.FontSize = 70;
            Tb.Margin = new Thickness(Img.Width * 2 + 30, 30, 0, 0);
            GrdLogo.Children.Add(Tb);

    }

そして、この関数を呼び出した後、エラーが発生します:

WinRT 情報: 名前は既にツリーに存在します: Tb.

thisGrid (GrdLogo) の Xaml コード:

<Grid x:Name="GrdLogo" HorizontalAlignment="Left" Height="160" VerticalAlignment="Top" Width="1366" Background="#FF1D1D1D">
        <Grid.ChildrenTransitions>
            <TransitionCollection>
                <AddDeleteThemeTransition />
            </TransitionCollection>
        </Grid.ChildrenTransitions>

    </Grid>

さらに、トランジションがなくても機能しますが、どのように違いがあるのか​​ わからないので、助けを求めています。動的コントロールの作成に関しては、まだかなり新鮮です。とにかく、コードは良さそうに見えますが、何らかの非同期メソッドを使用してこの TextBlock を削除する必要がありますか?

4

1 に答える 1

2

インスタンスは、そのビジュアル ツリーからGrdLogo指定された要素を削除したことを認識していないため、エラーが表示されます。Bd次のように呼び出して通知する必要がありますFrameworkElement.UnregisterName

if (called == true)
{
    GrdLogo.Children.Remove((TextBlock)GrdLogo.FindName("Tb"));
    GrdLogo.UnregisterName("Tb");
}

編集

W8 コードではそのメソッドを使用できないため (WinRT には名前スコープ アクセスはありません)、名前付き要素を完全に使用しないようにする必要があります。xaml でテキストブロック名を削除し、次のようなコントロールを削除する他の手段を使用します。

GrdLogo.Children.Remove(GrdLogo.Children.OfType<TextBlock>().Single());
于 2013-07-14T21:59:03.107 に答える