2011-09-30 118 views
1

我的XAML看起来像这样:如何获取ControlTemplate元素的属性?

<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的高度?快速查看显示pieSeries1.ChartArea的值,但该运行时不可用。我也试过FindName但没有结果。

应该是相当容易的权利?

+0

你在哪里试图获得价值?在代码隐藏或在您的XAML? –

+0

在代码后面 – 321X

回答

0

最终我找到了解决方案。不幸的是,@Bubblewrap的OnApplyTemplate解决方案无法正常工作。

  • 我给了我的charting:PieSeries一个名字,例如, pie
  • 在后面的代码中,我可以通过pie.Parent as EdgePanel访问ChartArea
2

您可以添加以下的图表类:

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

何时以及如何得到的高度取决于你自己的逻辑需要它。

0

创建附加属性(如ChartHeight)并将ChartArea的值ActualHeight绑定到它。

之后,只需检查您的代码中的值。