2013-07-16 3 views
0

StaticResource에 바인딩되는 페이지에 두 개의 ContentControls이 있는데 그 중 하나는 올바르게 그립니다. 다른 하나는 전혀 그려지지 않습니다.바운드 ContentControl이 표시되지 않습니다.

자원 따라서 정의된다

<Path x:Key="ArrowNorth" 
    Stroke="DarkGray" 
    StrokeThickness="1" 
    Data="M 20,4 L 36,20 L 32,24 L 23,15 L 23,33 L 17,33 L 17,15 L 8,24 L 4,20 Z"> 
    <Path.Fill> 
     <RadialGradientBrush GradientOrigin="0.15,0.2" Center="0.3,0.4"> 
      <GradientStop Color="White" Offset="0"/> 
      <GradientStop Color="{Binding Source={StaticResource MainWindowResource}, Path=ArrowColor}" Offset="1"/> 
     </RadialGradientBrush> 
    </Path.Fill> 
</Path> 

자원은 기본적으로 내가 원의 상단에 표시하려고 화살표입니다. 제대로 그리기되지 않는 장소는 다음과 같이 정의 할 수 있습니다 : 미세

<Grid Canvas.Top="30" Canvas.Left="6" ToolTip="Up" 
     Visibility="{Binding Source={StaticResource MainWindowResource}, Path=ShowVertical}"> 
    <Ellipse x:Name="lightEllipseU" Height="40" Width="40"> 
     <Ellipse.Fill> 
      <RadialGradientBrush GradientOrigin="0.3,0.3" Center="0.4,0.4"> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop 
        Color="{Binding Source={StaticResource MainWindowResource}, Path=LightColorU}" 
        Offset="1"/> 
      </RadialGradientBrush> 
     </Ellipse.Fill> 
    </Ellipse> 
    <!-- This doesn't display --> 
    <ContentControl Content="{Binding Source={StaticResource ArrowNorth}}"/> 
</Grid> 

Ellipse 디스플레이를 그냥 Z 순서를 테스트하기 위해, 나는 Ellipse에서 주석과 ContentControl는 여전히 표시하지 않을 것입니다. 페이지의 아래쪽에 나는 differnt 장소에 화살표를 사용하고 화살표는 잘 표시됩니다. 코드는 다음과 같습니다.

<Grid Canvas.Top="10" Canvas.Left="110" ToolTip="Y Axis"> 
    <Ellipse x:Name="lightEllipseN" Height="40" Width="40"> 
     <Ellipse.Fill> 
      <RadialGradientBrush GradientOrigin="0.3,0.3" Center="0.4,0.4"> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop Color="{Binding Source={StaticResource MainWindowResource}, Path=LightColorN}" Offset="1"/> 
      </RadialGradientBrush> 
     </Ellipse.Fill> 
    </Ellipse> 
    <!-- This displays just fine --> 
    <ContentControl Content="{Binding Source={StaticResource ArrowNorth}}"/> 
</Grid> 

코드는 절대적으로 동일합니다 (잘라 내기 및 붙여 넣기). 왜 다른 곳에서 작동하지 않는지 이해할 수 없습니다.

+0

추가 정보 : 세 번째 시간을 추가하려고했습니다. d가 올바르게 표시되었지만 원래의 표시가 중지되었습니다. 리소스는 한 번만 바인딩 될 수 있고 페이지의 마지막 바인딩이 우승하는 것처럼 보입니다. 아무도 이것을 확인할 수 있습니까? – dtaylor

답변

2

Visual에는 하나의 부모 만있을 수 있으며 마지막으로 사용 된 것은 Path이므로 비주얼 트리의 해당 위치에 놓입니다. 당신이 할 수있는 것은 Geometry 자원 만드는 것입니다 :

<Window.Resources> 
    <!-- ..... --> 
    <Geometry x:Key="myPath">M 20,4 L 36,20 L 32,24 L 23,15 L 23,33 L 17,33 L 17,15 L 8,24 L 4,20 Z</Geometry> 
</Window.Resources> 

을 한 다음 사용할 수있는 두 개 이상의 Path이다 : 그것은 두 개 이상의 장소에서 사용되는 이후,

<Grid ...> 
    <Ellipse Height="40" Width="40"> 
     <Ellipse.Fill> 
      <RadialGradientBrush GradientOrigin="0.3,0.3" Center="0.4,0.4"> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop Color="Black" Offset="1"/> 
      </RadialGradientBrush> 
     </Ellipse.Fill> 
    </Ellipse> 
    <Path Stroke="DarkGray" StrokeThickness="1" Data="{StaticResource myPath}"> 
     <Path.Fill> 
      <RadialGradientBrush GradientOrigin="0.15,0.2" Center="0.3,0.4"> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop Color="Black" Offset="1"/> 
      </RadialGradientBrush> 
     </Path.Fill> 
    </Path> 
</Grid> 

그러나 그것은 기본적으로 보이는 색상 변경 만하면 색상 맞춤을 위해 UserControl을 2 DependancyProperty으로 작성한 다음 원하는대로 다시 사용할 수 있습니다.

+0

dkozl, 답장을 보내 주셔서 감사 드리며 내 의혹을 확인하고 이유를 설명해 주셔서 감사합니다. 또한 두 가지 훌륭한 대안에 감사드립니다. 내 응용 프로그램에서는 Path를 두 곳에서만 필요로 했으므로 중복되었지만 다른 옵션을 사용하는 것이 좋습니다. – dtaylor