Как я могу получить свойство элемента ControlTemplate? - PullRequest
1 голос
/ 30 сентября 2011

Мой XAML выглядит так:

    <charting:Chart
            Name="pieSeries1">
        <charting:PieSeries
            IndependentValuePath="Category" DependentValuePath="Amount"
            Palette="{StaticResource MyPalette}">
        </charting:PieSeries>
        <charting:Chart.Template>
            <ControlTemplate TargetType="charting:Chart">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <datavis:Title Content="{TemplateBinding Title}" Style="{TemplateBinding TitleStyle}" Margin="1"/>
                    <Grid Grid.Row="1" Margin="5,0,5,0">
                        <chartingPrmtvs:EdgePanel x:Name="ChartArea" MinHeight="200" Style="{TemplateBinding ChartAreaStyle}">
                            <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" />
                            <Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" />
                        </chartingPrmtvs:EdgePanel>
                    </Grid>
                    <datavis:Legend VerticalAlignment="Top" Grid.Row="2" Header="{TemplateBinding LegendTitle}" Style="{TemplateBinding LegendStyle}" x:Name="Legend"/>
                </Grid>
            </ControlTemplate>
        </charting:Chart.Template>
    </charting:Chart>

Как я могу получить высоту ChartArea? Quick Watch показывает значение pieSeries1.ChartArea, но оно не доступно во время выполнения. Я также пытался FindName, но безрезультатно.

Должно быть довольно легко, верно?

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

Вы можете добавить следующее в свой класс Chart:

    private EdgePanel panel;
    public override void OnApplyTemplate()
    {
        panel = (EdgePanel)Template.FindName("ChartArea", this);
    }

Когда и как получить высоту, зависит от вашей собственной логики.

0 голосов
/ 03 октября 2011

В конце концов я нашел решение. Решение OnApplyTemplate от @Bubblewrap, к сожалению, не сработало.

  • Я дал своему charting:PieSeries имя, например, pie.
  • В коде позади я смог получить доступ к ChartArea через pie.Parent as EdgePanel.
0 голосов
/ 30 сентября 2011

Создайте вложенное свойство (скажем, ChartHeight) и привяжите к нему значение ActualHeight для ChartArea.

После этого просто проверьте значение в вашем коде.

...