Windows Phone 8:その親パネルから削除されたときにユーザーコントロールを配置することはできませんか?

StackOverflow https://stackoverflow.com//questions/23002391

質問

コンテンツパネルを含む簡単なアプリケーションページを持っていて、コンテンツパネルにUserControlを追加します。削除するボタンをクリックすると、UserControlのデストラクタは無効になりませんでした。なぜ?

これは私のメインページです:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Button Grid.Row="0" Content="AddOrRemove" Click="Button_Click"/>
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

    </Grid>
</Grid>
.

ボタンクリックイベントは次のとおりです。

private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (this.ContentPanel.Children.Count > 0)
        {
            this.ContentPanel.Children.Clear();
            return;
        }

        page = new PromptPage();
        this.ContentPanel.Children.Add(page);
    }
.

PROMPLPAGE.XAML:

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}">
    <StackPanel>
        <TextBlock Text="balabalaabcdefghijklmnop1"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop2"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop3"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop4"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop5"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop6"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop7"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop8"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop9"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop10"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop11"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop12"></TextBlock>
        <TextBlock Text="balabalaabcdefghijklmnop13"></TextBlock>
    </StackPanel>
</Grid>
.

epprompage.xaml.cs:

    public PromptPage()
    {
        InitializeComponent();
    }


    ~PromptPage()
    {
        System.Diagnostics.Debug.WriteLine("disposed!");
    }
.

役に立ちましたか?

解決

あなたのコードから、私は、MainPageがまだpageへの参照を保持しているため、もちろんそれは処分されません。削除後にNULLを設定してみてください:

page = null;
.

しかし、直ちに管理を処分するのに十分ではありません。GCプロセスを待つか、後である時点で直接呼び出す必要があります。

GC.Collect();
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top