2017-10-09 56 views
0

我有一个包含下面的XAML代码一个用户控件:用户控制与Viewbox控件 - 结合路径数据

<Viewbox Style="{StaticResource shapeViewboxStyle}"> 
     <Canvas Width="32" Height="32" Margin="5"> 
      <Path Data="{Binding Path=PathData}"/> 
     </Canvas> 
</Viewbox> 

在代码隐藏我暴露一个依赖属性:

public string PathData 
    { 
     get { return (string)GetValue(PathDataProperty); } 
     set { SetValue(PathDataProperty, value); } 
    } 

    public static readonly DependencyProperty PathDataProperty = 
     DependencyProperty.Register("PathData", typeof(string), 
      typeof(ContentItemHeader), new PropertyMetadata(null)); 

我想什么do是在插入用户控件时传递一个包含路径数据的字符串。

PathData="M 0,0 V 32 H 32 V 0 H 0 M 0,8 H 32" 

但这不起作用。我根本没有形象。我究竟做错了什么?

回答

1

设置绑定的的RelativeSource到用户控件的实例:

<Path Data="{Binding PathData, RelativeSource={RelativeSource AncestorType=UserControl}}" 
     ... /> 
+0

这工作!如果我正确地理解了这一点,这说的是不使用继承的DataContext,而是使用UserControl本身? – cce1911

+0

您的示例中似乎没有继承的DataContext。设置'PathData =“M 0,0 V 32 H 32 V 0 H 0 M 0,8 H 32”'不设置DataContext。通常,UserControl既不应该直接访问继承的DataContext,也不应该明确地设置它自己的。它应该公开依赖属性,然后在使用控件时绑定到继承的DataContext的属性,如''。 – Clemens

+0

我在代码隐藏中设置了DataContext,但没有显示出来。 'LayoutRoot.DataContext = this;' – cce1911