绑定的ContentControl不显示

时间:2013-07-16 14:15:09

标签: wpf binding contentcontrol geometry-path

我在页面上有两个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顺序,我注释掉了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>

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

1 个答案:

答案 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会很有用然后你可以在你喜欢的地方重复使用它