2017-06-23 1 views
1

J'essaie de créer un contrôle personnalisé graphique en camembert, et j'aurai besoin d'un nombre inconnu de tranches de tarte. J'essaye d'accomplir ceci en créant une propriété personnalisée, appelée peut-être DrawingCode, et ce code sera une chaîne qui peut être convertie et interprétée par un DrawingGroup. J'espérais que DrawingGroup.Children soit lié à DrawingBinding DrawingCode et utilise un convertisseur, mais je ne sais pas comment convertir une chaîne en une liste de GeometryDrawings. Toute aide est appréciée!Liaison à un groupe de dessin avec une quantité inconnue de dessins géométriques

Voici le ResourceDictionary contenant le générique pour mon contrôle PieChart:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:WPFTest"> 


<Style TargetType="{x:Type local:PieChart}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:PieChart}"> 
       <Image> 
        <Image.Source> 
         <DrawingImage> 
          <DrawingImage.Drawing> 
           <DrawingGroup Children="{TemplateBinding DrawingCode}" /> 
          </DrawingImage.Drawing> 
         </DrawingImage> 
        </Image.Source> 
       </Image> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Répondre

1

Votre convertisseur pourrait retourner un dessin (par exemple un DrawingGroup), ce qui vous lie directement à la propriété DrawingImage.Drawing:

<DrawingImage Drawing="{Binding DrawingCode, 
    RelativeSource={RelativeSource AncestorType=TemplatedParent} 
    Converter={StaticResource YourConverter}}"/> 
+1

Donc, si je comprends bien, je crée un DrawingGroup dans le convertisseur qui contient une liste d'enfants contenant GeometryDrawings? –

0

je dirais - utiliser un ListBox avec un Canvas comme ItemsPanel. De cette façon, vous obtenez tous les trucs sympa de la ListBox - de plusieurs éléments à la sélection.

Une réponse à cette question est here. Bien sûr, vous devez encore convertir un string en un dessin, mais de cette façon, vous n'avez pas à vous soucier d'avoir plusieurs éléments et de leur positionnement.