我在页面上有两个ContentControls
绑定到同一个StaticResource
,其中一个正确绘制,另一个不绘制。
因此定义了资源:
<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
仍然无法显示。在页面的下方,我在不同的地方使用箭头,箭头显示正常。这是代码:
<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 :(得分: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
会很有用然后你可以在你喜欢的地方重复使用它