0

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>

代码是完全一样的(剪切和粘贴)。我不明白为什么它会在一个地方而不是另一个地方工作。

4

1 回答 1

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>

然后您可以使用 is in more than one 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颜色绑定会很有用,然后您可以在任何您喜欢的地方重复使用它

于 2013-07-16T15:55:15.203 回答