4

棒グラフのユーザーコントロールを作成しようとしています。を使用して各バーを作成していますDataTemplate

問題は、各バーの高さを計算するために、最初にそのコンテナ(TemplatedParent)の高さを知る必要があることです。残念ながら私が持っているもの:

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

動作しません。NaNの値がコンバーターに返されるたび。RelativeSource={RelativeSource TemplatedParent}このコンテキストでは機能しませんか?DataTemplateが適用されている要素と「通信」できるようにするには、他に何ができますか?

ここで役立つ場合は、必要最低限​​の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>
4

2 に答える 2

5

あなたの質問に答えるには、 RelativeSource は でのみ機能し、ControlTemplateでは機能しませんDataTemplate

Silverlight Toolkit の Chartコントロールが棒グラフ (または、Toolkit が垂直の棒のセットを参照する縦棒グラフ) を作成する際に機能しない理由はありますか?

于 2010-05-03T18:59:54.697 に答える
0

ActualHeightプロパティを試しましたか?それはあなたに値を返すはずです。TemplatedParentモードのRelativeSourceはデータテンプレートで機能します、コントロール/アイテム自体ではなく、テンプレート化されたコントロール/アイテムのコンテンツプレゼンターを返します(コントロールテンプレートで使用された場合に行われます)。実験するには、データテンプレートにボタンを配置し、そのバインディング式(パスなし)をそのTagプロパティに割り当てます。Clickイベントを処理し、イベントハンドラーにブレークポイントを設定します。これで、プロジェクトを実行してボタンをクリックすると、コードでブレークポイントがヒットし、ボタンのTagプロパティ(送信者パラメーターから確認できます)から、バインドされているオブジェクトを確認できます。お役に立てれば...

于 2010-05-20T15:48:19.700 に答える