2012-02-13 2 views
3

이 질문이 지나치게 단순하지만 유감스럽게도 컨트롤에 배경을 만드는 방법을 파악하는 데 어려움을 겪고 있습니다. 앱 성능을 개선 할 수 있기를 바랍니다.스키닝 컨트롤 배경 - 성능 향상?

나는 9 개의 다른 컨트롤을 가지고 있습니다. 그들 모두는 배경을 가지고 있습니다. 배경은 이미지, 다른 컨트롤 또는 둘 모두로 구성됩니다. 모든 배경에는 또 다른 배경이 있습니다.

이 점을 슬라이드, 슬라이드 레이아웃 및 슬라이드 마스터가있는 파워 포인트 (이 순서대로 상속 됨)처럼 생각하십시오. 9 개의 슬라이드/컨트롤이 있습니다.

  • 처음 3 컨트롤

    이 같은 "컨트롤 레이아웃을"이 (의이 ControlLayout1를 부르 자). ControlLayout1은 요소 중 일부를 ControlMaster1에서 가져옵니다.
  • 두 번째 컨트롤도 동일한 컨트롤 레이아웃을 가지고 있지만 첫 번째 컨트롤과 다른 입니다. ControlLayout2으로 부르 자. 또한 은 ControlMaster1에서 상속됩니다.
  • 3 개의 컨트롤의 마지막 세트가 다시 달라집니다. 우리는 그들을 ControlLayout3이라고 부를 수 있습니다. 하지만 이번에는 다른 마스터로부터 상속받습니다. ControlMaster2.

지금은 각 컨트롤에서 각 XAML을 개별적으로 작성하고 있습니다. 나는이 각각의 항목 각각에 이것을 쓰지 않는 방법이 있어야한다고 생각하고 있습니다. 이상적으로 내가 만들고자하는 것은 재사용 할 수있는 XAML 집합입니다. 에 대한 다음 (다른 곳에 Application.Resources 나 같은 몰라요) ControlLayouts에 대한 어딘가에 다음

<UserControl x:Name="Control1"> 
    <MyBackground (ControlLayout1)/> 
</UserControl> 

<UserControl x:Name="Control2"> 
    <MyBackground (ControlLayout2)/> 
</UserControl> 

<UserControl x:Name="Control3"> 
    <MyBackground (ControlLayout3)/> 
</UserControl> 

그리고

<Canvas x:Name="ControlLayout1"> 
    <MyMasterBackground (ControlMaster1)/> 
</Canvas> 

<Canvas x:Name="ControlLayout2"> 
    <MyMasterBackground (ControlMaster1)/> 
    <TextBox Text="The Control 2"> 
</Canvas> 

<Canvas x:Name="ControlLayout3"> 
    <MyMasterBackground (ControlMaster2)/> 
    <TextBox Text="The Control 3"> 
</Canvas> 

그리고 다음은

어떤 의사 XAML의 제어 마스터

<Canvas x:Name="ControlMaster1"> 
    <Canvas.Background> 
     <ImageBrush ImageSource="/Images/image1.jpg" /> 
    </Canvas.Background> 
</Canvas> 

<Canvas x:Name="ControlMaster2"> 
    <Canvas.Background> 
     <ImageBrush ImageSource="/Images/image2.jpg" /> 
    </Canvas.Background> 
    <TextBox Text="Control Master 1"> 
</Canvas> 

일단 정의되면 ControlLayouts와 ControlMasters는 결코 변경할 필요가 없습니다. 정적입니다.

이러한 모든 것을 한 곳에 넣고 XAML을 다시 사용할 수 있다면 더 작은 XAP을 넘어서서 ControlLayouts가 자동으로 BitmapCached 또는 그와 비슷한 것을 얻을 때 성능이 향상 될 것으로 기대됩니다.

먼저, 위의 구현을위한 좋은 전략이 있습니까? (ControlLayouts 및 Masters에는 코드 숨김이 없습니다)? 두 번째로 Control1, Control2 등의 로딩 성능이 향상 될 것인가? 마지막으로 순수한 사용자 컨트롤 (예 : 코드가 뒤떨어져있는 경우)이 성능이 더 좋을까요?

미리 감사드립니다.[배경 일에 대해

: 단지의 UserControl의 뒤에있는 코드 형 브러시의 종속성 속성 (의이 MyBackgroundDP를 부르 자)를 생성하고 바인딩

+0

정적 물건을 BitmapCached로 만들려면 수동으로 설정해야합니다. 어떤 것들은 [자동 캐싱] (http://msdn.microsoft.com/en-us/library/ff602285(v=9595.aspx))이지만 수동으로 큰 차이를 만들 수있는 나의 경험에 의하면, 특히 UI 요소를 많이 옮겨 다니면서 갑작스러운 성능을 보았을 때 그렇습니다. –

답변

1

는 당신이 요청하는 몇 가지의 조합 당신의 XAML처럼에 : propdp
단순히 두 번 "propdp"그 TAB 쓰기 :

<UserControl ...> 
    <Grid Background={"Binding MyBackgroundDP, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType=UserControl}}"> 
    <!-- More XAML declarations --> 
    </Grid> 
</UserControl> 

은 종속성 속성을 만들려면 Visual Studio에서 조각에 내장 할 수 있습니다. 필드를 채우면 모두 좋습니다.

괜찮 았나? ;)

거친 부분 : 소위 마스터 페이지 만들기.
사실 그것은 배경과 크게 다르지 않습니다.
다른 종속성 속성을 선언하거나,이 시간에만 Object 유형을 지정하거나 FrameworkElement (더 나은)를 선언하십시오.

그런 다음 XAML에서 일종의 자리 표시자인 ContentControl을 선언합니다. 의이 예를 들어 MyContentDP를 부르 자 :

<UserControl ...> 
    <Grid Background={"Binding MyBackgroundDP, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType=UserControl}}"> 
    <ContentControl ContentTemplate="{Binding MyContentDP, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType=UserControl}}" /> 
    </Grid> 
</UserControl> 

당신은 당신이 "마스터보기"에 제공하려면 어떤 다른 미세 조정은, 그리드 주위에 테두리를 추가 꽃을 넣을 수 있습니다, 당신은 그것을 이름을 지정합니다. 당신이 그것을 사용하는 방법

이 완료되면

이 그것이

<Window ... 
     xmlns:local="...reference_to_your_usercontrol_dll/exe"> 
    <Grid> 
     <local:MyUserControl MyBackgroundDP="Red"> 
     <local:MyUserControl.MyContentDP> 
      <!-- More XAML declarations here --> 
     </local:MyUserControl.MyContentDP> 
     </local:MyUserControl> 
    </Grid> 
</Window> 

을 MyUserControl

불렀다 가정, 지금 성능 점 :

당신이 넣으면 모든 XAML이 사용자 정의 제어와 같은 (UserControl에서 DIFFERENT)을 사용하면 모든 XAML을 App.xaml에 넣을 수 있습니다
왜? XAML을 파싱하는 것은 집중적 인 작업이 될 수 있으므로 필요할 때마다 WP7/SL을 런타임에 구문 분석하면 성능이 저하됩니다.
대신 App.xaml이 시작할 때 구문 분석되고 메모리에 있습니다. 그게 당신의 응용 프로그램을 로딩 할 때하는 일입니다. XAML이 거의없는 컨트롤의 경우 성능은 향상되지만 그래도 좋은 방법입니다.

호프가 도움이 되었기를 바랍니다.

Bab.