2011-07-06 2 views
1

응용 프로그램을 실행하는 동안 수 백번 생성하는 컨트롤이 있습니다. 내 응용 프로그램이 정지 때문에를 InitializeComponent 함수에서, 이 System.Windows.Application.LoadComponent (이, 새로운 선택 System.Uri ("/ FA, 구성 요소/제어/공통/팝업/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

자주 사용하는 팝업의 내용을 설명 할 수 있습니까? 단일 공유 컨트롤의 "필요시 삽입 (insert on demand)"이 더 적절할 수있는 경우 Xaml에서 인라인으로 삽입하는 경향이 있습니다. –

+0

내 질문에 편집 됨 – Himberjack

+0

컨트롤에 대해 좀 더 자세히 설명해 주시겠습니까? 사용 방법은 무엇입니까? 당신이 '응용 프로그램에서 수백 번'컨트롤을 만들었다 고 말할 때 그것이 xaml에서 수백 번 사용하는 UserControl이라는 것을 의미합니까? 또는 런타임에 메시지를 사용자에게 표시하는 데 사용하는 MessageBox/ChildWindow 유형의 컨트롤입니까? –

답변

2
된 UserControls에 대한 XAML이있는 UserControl의 모든 새로운 인스턴스 용 Silverlight에서 구문 분석

입니다. 즉, 동일한 UserControl 인스턴스를 100 개 추가하면 xaml이 읽히고 구문 분석되어 개체로 인스턴스화 된 다음 시각적 개체가 100 번 인스턴스화됩니다. (

  1. 액세스
  2. 가 "진짜"제어를 할 수 있도록 UserControl을 재 작성
  3. (A ContentControl을 말하자면,에 의해 사용) DataTemplate이 내에서이를 참조하여 다른 위치에서의 UserControl : 당신은이 가능성을 가지고 예 : Control 또는 ContentControl 서브 라인)
관련 문제