هاتف ويندوز 8:لا يمكن التخلص من عنصر تحكم المستخدم عند إزالته من اللوحة الأم؟

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

سؤال

لدي صفحة تطبيق بسيطة بها لوحة محتوى، وأقوم بإضافة عنصر تحكم المستخدم في لوحة المحتوى.عندما أنقر فوق زر لإزالته، لم يتم تنفيذ أداة التدمير الخاصة بـ 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);
    }

PromptPage.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>

PromptPage.xaml.cs:

    public PromptPage()
    {
        InitializeComponent();
    }


    ~PromptPage()
    {
        System.Diagnostics.Debug.WriteLine("disposed!");
    }
هل كانت مفيدة؟

المحلول

من الكود الخاص بك، أستطيع أن أقول بالطبع أنه لن يتم التخلص منه لأن الخاص بك MainPage لا يزال يحمل الإشارة إلى page.حاول تعيينها فارغة بعد الإزالة:

page = null;

ولكن لا يكفي التخلص من عنصر التحكم على الفور.يجب عليك انتظار عملية GC أو الاتصال بها مباشرة في وقت لاحق:

GC.Collect();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top