我有一個選項卡控制元件,其中每個選項卡項都是自定義的用戶控制元件。問題是每當程式啟動時,每個單獨的控制元件都會被初始化和加載。然后,當切換到選項卡時,它必須再次重新加載。
我已經更改了選項卡專案的加載方式,如下所示。這可以防止用戶控制元件初始化和加載,直到它們被點擊(這是首選):
<TabControl>
<TabItem>
<TabItem.ContentTemplate>
<DataTemplate>
<local:ctlHome />
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
<TabItem>
<TabItem.ContentTemplate>
<DataTemplate>
<local:ctlTwo />
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
...
</TabControl>
當我第一次推出它時,每次我切換到一個新選項卡時,它都會呼叫建構式 -> 卸載上一個選項卡 -> 加載新選項卡,這很棒。它只會呼叫一次建構式,每當我重新選擇選項卡時,它只會卸載 - >按預期加載。
現在,每次我選擇一個選項卡時,它都會呼叫建構式并重新初始化整個控制元件。我不確定為什么它不再將標簽保留在記憶體中。
使用此方法初始化后,有什么方法可以將用戶控制元件保留在記憶體中?
uj5u.com熱心網友回復:
如果將 aDataTemplate與a一起使用ContentControl,則只會加載最初可見的控制元件:
<TabControl xmlns:s="clr-namespace:System;assembly=mscorlib">
<TabControl.Items>
<s:String>home</s:String>
<s:String>two</s:String>
</TabControl.Items>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content">
<Setter.Value>
<local:ctlHome />
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="two">
<Setter Property="Content">
<Setter.Value>
<local:ctlTwo />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
雖然這兩個控制元件都會立即初始化,但這應該不是問題,因為您不應該在建構式中執行任何繁重的操作。將任何初始化邏輯移動到Loaded事件處理程式或類似的地方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/360014.html
