2017-10-09 3 views
0

J'ai un UserControl qui contient le code XAML suivant:contrôle utilisateur avec Viewbox - chemin de liaison des données

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

Dans le code-behind j'expose une propriété de dépendance:

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)); 

Ce que je veux faire est passer dans une chaîne avec les données de chemin lorsque j'insère le contrôle utilisateur.

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

Mais cela ne fonctionne pas. Je n'ai pas d'image du tout. Qu'est-ce que je fais mal?

Répondre

1

Réglez le RelativeSource de liaison à l'instance UserControl:

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

Cela a fonctionné! Si je comprends bien, ce que cela dit est de ne pas utiliser le DataContext hérité, à la place utiliser le contrôle UserControl lui-même? – cce1911

+0

Il ne semble pas y avoir de DataContext hérité dans votre exemple. La définition de 'PathData =' M 0,0 V 32 H 32 V 0 H 0 M 0,8 H 32 "' ne définit pas de DataContext. En règle générale, un contrôle UserControl ne doit pas accéder directement à un DataContext hérité, il ne doit pas explicitement définir le sien. Il doit exposer les propriétés de dépendance, qui sont ensuite liées aux propriétés d'un DataContext hérité lorsque vous utilisez le contrôle, comme ''. – Clemens

+0

J'ai défini le DataContext dans le code-behind, mais je ne l'ai pas montré. 'LayoutRoot.DataContext = this;' – cce1911