2013-05-10 72 views
0

我的Visiblox图缩小到适合可用空间,并且有时轴标题缩小得太多以至于切断。所以我想我会为LinearAxis创建一个新的ControlTemplate,使用Blend的起始代码作为模板。Visiblox - 缩放轴标题以适合可用空间

我在AxisLabel文本块周围添加了一个ViewBox,但它不能正常工作。你需要做一些有趣的事情来处理网格行和列,因为代码需要足够通用以在水平或垂直轴上工作。经过大量的试验和错误,以及一些外部支持,我有一个工作模板,缩小我的轴标题以适应可用空间。见下面的答案。

回答

0
<ControlTemplate TargetType="{x:Type charts:LinearAxis}" x:Key="LinearAxisTemplate"> 
    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
     <Grid x:Name="LayoutRoot" Background="{TemplateBinding Background}"> 
      <Grid x:Name="LabelsContainer"/> 
      <Canvas x:Name="BehaviourCanvas"/> 
      <Viewbox Stretch="Uniform" StretchDirection="DownOnly" 
         Grid.Row="{Binding (Grid.Row), ElementName=AxisLabelContainer}" 
         Grid.Column="{Binding (Grid.Column), ElementName=AxisLabelContainer}"> 
       <Visiblox_Charts_Primitives:TransposePanel x:Name="AxisLabelContainer"> 
        <TextBlock x:Name="AxisLabel" Style="{TemplateBinding TitleStyle}" Text="{TemplateBinding Title}" /> 
       </Visiblox_Charts_Primitives:TransposePanel> 
      </Viewbox> 
      <Line x:Name="AxisLine" Style="{TemplateBinding AxisLineStyle}" Stretch="Fill"/> 
     </Grid> 
    </Border> 
</ControlTemplate> 

只需将此模板应用于任何图表中的任何LinearAxis,并且标题将缩小至合适。你可以很容易地适应任何类型的轴。

(XAxis as LinearAxis).Template = MyChart.FindResource("LinearAxisTemplate") as System.Windows.Controls.ControlTemplate;