2011-07-06 34 views
1

我有一個控件,我在應用程序中創建了數百次。 我注意到我的應用程序凍結,因爲在Initializecomponent函數中, 有 System.Windows.Application.LoadComponent(this,new System.Uri(「/ fa; component/Controls/Common/Popup/PopupItem.xaml」, System.UriKind.Relative));Silverlight控件InitializeComponent凍結了應用程序

如果我發表評論,應用程序運行順利(當然沒有控制渲染)。

我該如何避免/提高性能,以便XAML每次都不會被加載,但不知怎麼回收控制?

for (int i = 5; i < colValues.Count; i++) 
      { 
       if (colValues[i].Count == "1") 
        continue; 

       PopupItem pi = new PopupItem(colValues[i], false, this, FilterCategorySearch.PopupContent); 
       FilterCategorySearch.PopupContent.spItemsContainer.Children.Add(pi); 
      } 

和XAML是

<UserControl x:Class="FacetedSearch.Controls.Common.Popup.PopupItem" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:local="clr-namespace:FacetedSearch.Controls.Common" 
mc:Ignorable="d"> 
<UserControl.Resources> 
    <SolidColorBrush x:Key="TextNormalBrush" Color="#FF656565"/> 
    <SolidColorBrush x:Key="TextHoverBrush" Color="#FFA39F9F"/> 
</UserControl.Resources> 

<StackPanel MouseEnter="LayoutRoot_MouseEnter" MouseLeave="LayoutRoot_MouseLeave" Orientation="Horizontal" Margin="0,4,0,0"> 
    <local:CTLCheckBox x:Name="cbFilter" MouseLeftButtonUp="cbFilter_MouseLeftButtonUp" Cursor="Hand" Height="14" Width="10" Margin="4,0" /> 
    <TextBlock x:Name="tbFilterName" Foreground="{StaticResource TextNormalBrush}" MouseLeftButtonUp="tbFilterName_MouseLeftButtonUp" TextWrapping="Wrap" FontFamily="Arial" Margin="0,0,4,0" Cursor="Hand"/> 
    <TextBlock x:Name="tbFilterCount" TextWrapping="Wrap" Foreground="{StaticResource TextNormalBrush}" FontFamily="Arial"/> 
</StackPanel> 

感謝

+0

您能解釋一下彈出窗口中經常重複使用的內容嗎?當一個單一共享控件的「按需插入」可能更合適時,示例中有一種傾向於在Xaml中插入可擴展的內聯。 –

+0

我編輯了我的問題 – Himberjack

+0

請問您是否可以指定更多關於您的控件,以及如何使用它?當你說'在應用程序中'創建'你的控件'數百次',你的意思是它是一個UserControl,你在xaml中使用了數百次?或者是一個MessageBox/ChildWindow類型的控件,用於在運行時向用戶顯示消息? –

回答

2

的用戶控件的XAML是受Silverlight for用戶控件的每一個新實例解析。這意味着如果添加100個相同UserControl的實例,xaml將被讀取,解析,實例化爲對象,然後是可視對象100次。 你有2種可能:

  1. 訪問您的用戶控件從另一個位置由一個DataTemplate內引用(通過的,也就是說,一個ContentControl中來使用)
  2. 重寫你的用戶控件是一個「真正的」控制(即Control或ContentControl的子類)