Domanda

Sto cercando di fare un controllo utente grafico a barre. Sto creando ogni barra utilizzando un DataTemplate.

Il problema è, al fine di calcolare l'altezza di ogni barra, ho bisogno di conoscere l'altezza del suo contenitore (la TemplatedParent). Purtroppo quello che ho:

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

non funziona. Ogni valore un momento di NaN viene restituito al mio Converter. Non RelativeSource={RelativeSource TemplatedParent} non funziona in questo contesto? Che altro posso fare per permettere al mio DataTemplate a "parlare" con l'elemento viene applicato a?

Incase aiuta qui è la 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>
È stato utile?

Soluzione

Per rispondere alla tua domanda RelativeSource funziona solo in un ControlTemplate non funziona in un DataTemplate.

C'è un motivo per cui la Carta Silverlight Toolkit controlli non funzionano per voi nella creazione di un grafico a barre (o di un istogramma come Tookit si riferisce alla serie verticale di barre).

Altri suggerimenti

Hai provato la proprietà ActualHeight? Dovrebbe restituire un valore. RelativeSource con la modalità TemplatedParent lavoro in un modello di dati, ma tornerà il presentatore contenuto del controllo / voce su modelli, non il controllo / elemento stesso (cosa che fa quando viene utilizzato in un modello di controllo) . Di sperimentare, mettere un pulsante nel modello dei dati, e assegnare quello che lega l'espressione (senza il percorso) per la sua proprietà Tag. Gestire l'evento Click, e mettere un punto di interruzione nel gestore di eventi. Ora, quando si esegue il progetto e fare clic sul pulsante, il punto di interruzione sarà successo nel codice, e si può vedere l'oggetto che è vincolante per dalla proprietà Tag del pulsante (che potete vedere dal parametro mittente). Spero che questo aiuta ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top