2013-07-16 49 views
0

我有兩個ContentControls在一個頁面上綁定到相同的StaticResource和其中一人繪製正確的另一個根本沒有繪製。綁定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順序,我註釋掉EllipseContentControl仍然不會顯示。再往下看,我在不同的地方使用箭頭,箭頭顯示得很好。這裏是代碼:

<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,感謝您的回覆,並感謝您確認我的懷疑並解釋原因。另外,感謝這兩個偉大的選擇。在我的應用程序中,我只需要在兩個地方的路徑,所以我只是複製它,但很高興有其他選項。 – dtaylor