2011-02-24 4 views
4

XAML에서 Silverlight 응용 프로그램에 대한 클립 아트를 작성했거나 http://www.xamalot.com에서 다운로드했다고 가정 해 보겠습니다. 내 응용 프로그램에서 사용하는 가장 좋은 방법은 무엇입니까?Silverlight에서 XAML 클립 아트를 사용하는 올바른 방법은 무엇입니까?

각 아트마다 사용자 정의 컨트롤을 만드는 것이 가장 좋습니까? 아니면 리소스 사전에서 참조 할 수있는 더 좋은 방법이 있습니까?

업데이트 :

제공하는 답변을 꽤 상세하고, 내가 상상했던 것보다 훨씬 더 큰 목적이를 사용하여 암시하는 것으로 보인다. 도구 모음의 단추로 사용하기 위해 XAML 클립 아트를 사용하는 가장 좋은 방법을 알고 싶었습니다.

답변

2

데이터베이스에 XAML 클립 아트 개체를 XML로 저장 한 다음 필요에 따라 웹 서비스를 통해 다운로드 할 수 있습니다. 다운로드 한 XAML이 클라이언트에 있으면 다음과 같이 할 수 있습니다.

string myDownloadedXaml; // downloaded from the server 
Grid myGrid; // the container in your view 
myGrid.Children.Add(XamlReader.Load(myDownloadedXaml)); 
+0

+1 정확함. generader 요소를 여러 번 사용할 수 없을 때 리소스에 저장하면 여러 번 파싱 할 필요가 없습니다. –

+0

'Load'의 결과를'UIElement'로 형변환해야합니다. – AnthonyWJones

+0

@Luc : 다운로드 한 Xaml의 결과가 'DataTemplate'일 필요가 있다는 것을 생각하면 좋습니다. 그러면 이미지의 여러 인스턴스가'DataTemplate'의'LoadContent' 메소드로 생성 될 수 있습니다. – AnthonyWJones

6

더 좋은 방법이 있습니다.

클립 아트의 각 조각에는 개별 파일이 있지만 사이트에서 사용하는 래퍼는 아닙니다. Canvas 인스턴스는 리소스 사전에 직접 배치되어 가장 좋은 방법은 아닙니다. 우리는 ResourceDictionary로 시작하지만 이런 식으로 뭔가 보일 것입니다 : -

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:YourApplication"> 
    <ControlTemplate TargetType="local:XamlImage" x:Key="SomeImage"> 
     <Viewbox> 
      <Canvas> <!-- this the toplevel canvas from the site or your design --> 
      </Canvas> 
     </Viewbox> 
    </ControlTemplate> 
</ResourceDictionary> 

이 두 가지, 첫째는 이미지를 포함하는 ControlTemplate를 사용 않습니다를,이 스토리지의보다 효율적인 형태로 할 때 이미지입니다 이미지가 아이콘으로 사용될 때와 같이 여러 번 사용할 수 있습니다.

두 번째로 벡터 기반 그래픽을 제공하는 Viewbox을 사용하여 이미지를 지정된 크기로 조정할 수 있습니다.

프로젝트에 새 Templated Custom Control을 추가하고 XamlImage이라고해야합니다. 당신은 아무 것도 할 필요가 없으며 단지 존재할 필요가 있습니다.

당분간이 리소스 사전을 App.Xaml에 추가 할 수 있습니다 (남아있는 곳은 없을 것입니다).

는 이제 사용하여 페이지에 이미지를 배치 할 수 있습니다 : -

<local:XamlImage Template="{StaticResource contactnew}" /> 

이제 여러 가지 방법으로 앞으로가 당신의 진짜 의도와 볼륨에 따라 시나리오는 저를 위해 철저히 설명하기 위해 다양했습니다. 따라서 두 가지 극단을 취하십시오 ...

이미지를 선택하고 싶다면 더 많은 파일을 만들고 app.xaml의 MergedDictionaries에 추가하면됩니다. 그러나 큰 측면은 응용 프로그램 시작시 이러한 모든 이미지 Xamls가 구문 분석되고로드되는 것이 바람직하지 않을 수 있다는 것입니다.

반면에 분류 된 Xaml 클립 아트 라이브러리가있을 수 있습니다. 이 경우 폴더 구조에 배치하고 각각에 대해 표준 크기의 축소판 그림을 포함 할 수 있습니다. 카탈로그로 작동하고 필요에 따라 Xaml 파일을로드 할 Xml 파일이 경우 파일에서 ResourceDictionary을 삭제하고 ControlTemplate을 루트 요소로 사용하고 XamlReader을 사용하여 템플릿을로드 한 다음 템플릿을 자신의 사전에 캐싱 (아마도 카탈로그 구현의 일부로)합니다.

+0

어쩌면 나는 약간 밀집되어있을 것이다. 'contactnew'는 어디에서 왔는가? 페이지에 이미지를 배치하는 방법에 대한 예제는 따르기 쉽지 않습니다. – Killnine

관련 문제