2011-10-31 2 views
0

저는 Silverlight를 처음 사용하고 많은 것을 공유 할 여러 SL 응용 프로그램을 코딩해야합니다.일반적인 컨트롤이있는 여러 Silverlight 응용 프로그램에 대한 좋은 접근 방법은 무엇입니까?

나는 모든 일반적인 C# 코드를 분리 된 어셈블리에 넣을 계획이지만 XAML 부분에 대해서는 정말 짜증이납니다.

내 모든 응용 프로그램은 몇 가지 일반적인 컨트롤이됩니다

  • 상단의 메뉴 바 상단에
  • 툴바, 하단에
  • 상태 표시 줄,
  • 패널 왼쪽에.

웹에서 힌트를 검색 한 결과 XAML 코드를 상속 할 수 없다는 사실을 발견했습니다.

그래서 내 일반적인 컨트롤을 포함하는 큰 사용자 지정 컨트롤을 만든 다음 모든 응용 프로그램의 기본 페이지에 추가하는 방법에 대해 생각했지만 올바른 방법은 아닙니다.

가장 좋은 방법은 무엇입니까?

감사 어떤 도움,

편집 : 나는 여기 좀하고 싶습니다 무엇, 나는 이미 윈폼했던 무언가이다. 나는 "기본"WinForm을 만들고 거기에 몇 가지 컨트롤을 넣었습니다. 그런 다음이 "기본"WinForm을 상속 한 새 WinForms를 만들 때 모든 기본 컨트롤이있었습니다. 사용자 지정 컨트롤을 사용할 필요가 없었습니다.

그러나 Silverlight는 WinForm이 아니며 원하는 것은이 방법으로는 불가능할 수도 있습니다.

답변

2

각 응용 프로그램에 별도로 복사/링크되는 일부 템플릿 등으로 하나의 리소스 파일을 만들지 여부, 또는 공용 DLL에 포함 된 것을 사용할지 여부에 따라 달라집니다.

후자를 원한다면 여기 하나의 접근법이 있습니다.응용 프로그램 루트 컨트롤에서 사용할 다음

<ContentControl x:Class="MyLibrary.MyLayoutControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ContentControl.Template> 
     <ControlTemplate TargetType="ContentControl"> 
      <!-- this could be a layout grid with various other controls in it --> 
      <Border BorderBrush="Red" BorderThickness="2" CornerRadius="5"> 
       <ContentPresenter Content="{TemplateBinding Content}" /> 
      </Border> 
     </ControlTemplate> 
    </ContentControl.Template> 
</ContentControl> 

: 그 컨트롤 템플릿에 공통의 레이아웃을 정의하는 서브 클래스 ContentControl는 적절한 장소에서 그 내용에 바인딩을 포함, (모든 XAML에서이 작업을 수행 할 수 있습니다)

<UserControl x:Class="InCustomControlTest.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:MyLibrary;assembly=MyLibrary"> 

    <c:MyLayoutControl> 
     <Button Content="Hi I am a button" /> 
    </c:MyLayoutControl> 
</UserControl> 

더 정교한 작업을 수행하려면 사용자 지정 컨트롤을 만들어야합니다. 대부분의 경우 올바른 위치에 놓인 다양한 구성 요소 (예 : 상태 표시 줄)에 대해 몇 개의 UserControl을 사용하지 않을 수 있습니다.

+0

당신은 내 목숨을 구원해 주셨습니다. ; o) 사실, 내가 원했던 것은 공통 DLL에있는 것이었고 그 해결책은 그 트릭을 수행하는 것 같습니다. 감사합니다. – Rodolphe

0

xaml 리소스를 라이브러리 프로젝트에 넣는 데 큰 문제는 없습니다. 다른 프로젝트의 자원 중심을 참조 할 때는 어셈블리 이름을 포함시켜야합니다. BasedOn 속성을 넣을 수있는 템플릿 상속도 있습니다.

편집 : 글쎄, 우리가 얼마 전에 작업 한 프로젝트를 보면 우리는 실제로 문제가 있다는 것을 기억하고 각 프로젝트에 xaml 리소스를 복사했다 ... 잊어 버렸다 =) 나는 그것이 효과가 있다고 생각하지만 여기 저기에 몇 가지 문제가있었습니다. xaml 파일을 링크로 추가 할 수 있습니까?

개인적으로 나는 많은 컨트롤을 만들지 않고 대부분의 것들을위한 템플릿을 가지고 있습니다. 컨트롤을 가지고 있다면, 코드 사용으로 xaml을 방지하면서 템플릿 사용에 대해서만 C#으로 작성하는 것이 좋습니다. 내 개인적인 경험만으로는 일반적인 지침이 아닐 수도 있습니다.

+0

답변 해 주셔서 감사합니다. 완전히 이해하고 있는지 잘 모르겠습니다. C# + 템플릿에서 컨트롤을 정의하면 여전히 모든 내 페이지에 컨트롤을 추가해야합니다. 나는 내가하고 싶은 것을 더 잘 설명하기 위해 나의 질문을 편집 할 것이다. – Rodolphe