Frage

Ich versuche, ein Balkendiagramm Usercontrol zu machen. Ich bin jeden Takt die Schaffung eines DataTemplate verwendet wird.

Das Problem ist, um die Höhe der einzelnen Balken zu berechnen, habe ich zunächst die Höhe des Containers müssen wissen (die TemplatedParent). Leider, was ich habe:

Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height,  Converter={StaticResource HeightConverter}, Mode=OneWay}" 

funktioniert nicht. Jedes Mal, wenn ein Wert von NaN ist meinen Konverter zurückgegeben. Hat RelativeSource={RelativeSource TemplatedParent} in diesem Zusammenhang nicht arbeiten? Was kann ich sonst noch tun, um meine Datatemplate zu „sprechen“ zu ermöglichen, auf das Element es angewandt wird?

Incase es hilft hier die Barebone-Datatemplate:

<DataTemplate x:Key="BarGraphTemplate">
    <Grid Width="30">
        <Rectangle HorizontalAlignment="Center" Stroke="Black" Width="20" Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height,  Converter={StaticResource HeightConverter}, Mode=OneWay}" VerticalAlignment="Bottom" />
    </Grid>
</DataTemplate>
War es hilfreich?

Lösung

Ihre Frage zu beantworten, Relative funktioniert nur in einem ControlTemplate es funktioniert nicht in einem DataTemplate.

Gibt es einen Grund, warum das Silverlight-Toolkit-Diagramm Kontrollen für Sie tun nicht Arbeit ein Balkendiagramm (oder ein Säulendiagramm als die Tookit bezieht sich auf vertikale Reihe von Balken) zu schaffen.

Andere Tipps

Haben Sie versucht, die Actual Eigenschaft? Es sollten Sie einen Wert zurückgeben. Relative mit dem TemplatedParent Modus wird Arbeit in einer Datenvorlage, aber es wird den Inhalt Moderator der Templat Steuerung / Stück zurückzukehren, nicht die Steuer / Element selbst (was sie tut, wenn sie in einer Steuervorlage verwendet) . Um Experiment, setzen Sie einen Button in der Datenvorlage und assign, dass die Bindung Ausdruck (ohne den Pfad) zu seinem Tag-Eigenschaft. Handelte sein Click-Ereignis, und setzen Sie einen Haltepunkt in den Event-Handler. Nun, wenn Sie das Projekt ausführen und auf die Schaltfläche klicken, wird der Breakpoint Hit in Ihrem Code, und Sie können das Objekt sehen, dass es von der Tag-Eigenschaft der Schaltfläche verbindlich ist (die Sie vom Sender Parameter sehen). Hoffe, das hilft ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top