2011-01-24 2 views
1

내가 표현 내 XAML에서 두 개의 자원 스타 반 스타가 :C#에서 XAML에 정의 된 리소스 항목의 여러 복사본을 추가하는 방법은 무엇입니까?

I는 등급을 나타내는 내 C# 코드에서 ItemsControl에로의 몇 가지를 추가 할
<Path x:Key="HalfStar" Margin="2" Height="48" Stretch="Uniform" 
Data="M12.763,0 L12.763499,18.546873 L4.8750005,24.277998 L7.887928,15.004692 L0,9.273982 L9.7000046,9.273982 z" F 
ill="Blue/> 
<Path x:Key="FullStar" Margin="2" Height="48" Stretch="Uniform" 
Data="M12.763,0 L15.824005,9.2739811 L25.527,9.2739811 L17.638763,15.004915 L20.652,24.278 L12.763499,18.546873 L4.8750005,24.277998 L7.887928,15.004692 L0,9.273982 L9.7000046,9.273982 z" 
Fill="Blue"/> 

그래서 나는 속성을 할당을 "경로"유형의 내 C# 코드 아래 참조 : "요소가 이미 다른 사람의 자식 :하지만 매번

Main.FullStar = ((Path)Resources["FullStar"]); 
Main.HalfStar = ((Path)Resources["HalfStar"]); 

을 그리고 ItemsControl에에 별을 추가하려면 다음을 사용하여 나는 다음과 같은 XAML 오류 얻을 이렇게 요소 ". 그러나 만약 내가 간단한 코드 예제에서 간단한 객체를 인스턴스화한다면 서클 나는 내가 원하는만큼 이것을 추가 할 수있다.
이 문제는 C#에서 정의 된 버전에서 사용되는 Named Key 경로 때문에 발생합니다. 따라서이 경우에는 오류가 발생하지만 필요에 따라 많은 FullStars 및 HalfStars를 추가하려고합니다. 관심있는 데이터. Geometry.Parse 메서드를 사용 하겠지만 Windows Phone의 Silverlight에는 존재하지 않습니다.

"HalfStar"및 "FullStar"라는 리소스를 사용하여 ItemsControl에 추가 할 수 있도록하려면 코드 추가 부분에서 추가 작업을 수행해야하지만 별 및 항목 컨트롤은 XAML에 정의되어 있어야합니다 . 내 유일한 해결책은 서클을 대신 사용하는 것입니다.하지만 필요한 리소스가 있다고 생각하면 부족합니다. XAML의 ItemsControl에 복사하여 붙여 넣으면 잘 보일 수 있습니다. 현재 리소스 중 하나라도 추가 할 수 없습니다. 플랫폼의 한계로 인해 C#에서이를 정의 할 수 없습니다.

답변

0

하나의 부모 만 가질 수 있기 때문에 FrameworkElement의 단일 인스턴스는 여러 위치에서 다시 사용할 수 없습니다. 그러나 PathGeometry을 두 셰이프의 리소스로 유지하고 코드에 Path을 새로 만든 다음 PathGeometryData 속성으로 설정할 수 있습니다.

업데이트 : 이전 제안이 작동하지 않습니다. 오판에 사과드립니다. 이 문제를 해결할 수있는 또 다른 방법은 두 개의 다른 Path 요소를 각각 UserControl에 정의한 다음 코드 숨김에 해당하는 새 인스턴스를 각각 추가하는 것입니다. 내가 알기에 이상적이지는 않지만 주위에 또 다른 방법이 있다고 생각하지 않습니다. Path 요소의 스타일을 지정하려면 사용자 지정 컨트롤을 만들고 Themes.xaml에서 스타일을 지정할 수 있습니다.

Rating 컨트롤을 만들려고하는 경우 의 컨트롤을 사용하는 방법을 설명하는 this blog post을 살펴볼 수 있습니다.

+0

흥미 롭긴하지만 PathGeometry 요소에 경로 데이터를 저장하는 것은 Silverlight에서 지원되지 않습니다. – RoguePlanetoid

+0

실무 솔루션에 대한 내 대답을 업데이트했습니다. –

+0

UserControl은 이것을 게시하기 전에이 점을 완벽하게 생각했지만 문제점을 해결했습니다. 언급 한 등급 제어를 사용하는 것으로 생각했지만 단순한 애플리케이션에만 등급을 표시해야합니다. – RoguePlanetoid

관련 문제