2011-09-30 148 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綁定到它。

之後,只需檢查您的代碼中的值。