我正在自定義Silverlight Toolkit圖表的佈局。我有兩個要求:更改Silverlight圖例圖例項目佈局
1)將圖例區域移動到圖表底部(已解決)。
2)更改圖例中要相互顯示的元素的佈局,即 即。 {legend 1},{legend 2},{legend 3},而不是默認的列格式。
1)很容易用ControlTemplate解決(見下文)。
2)如何更改圖例項目的佈局?可以通過進一步自定義Chart的ControlTemplate來完成,還是Legend需要自己的ControlTemplate?
圖表本身被定義爲:
<chartingToolkit:Chart Name="chartCompareMain"
Template="{StaticResource ChartLayoutLegendBottom}">
<chartingToolkit:Chart.Axes>
<chartingToolkit:DateTimeAxis Orientation="X"
AxisLabelStyle="{StaticResource ChartDateFormat}">
</chartingToolkit:DateTimeAxis>
<chartingToolkit:LinearAxis Orientation="Y"/>
</chartingToolkit:Chart.Axes>
</chartingToolkit:Chart>
的控件模板移動的圖例項(基於默認的模板)是:
<ControlTemplate x:Key="ChartLayoutLegendBottom" TargetType="chartingToolkit:Chart">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<dataviz:Title Grid.Row="0" Content="{TemplateBinding Title}" Style="{TemplateBinding TitleStyle}" />
<Grid Grid.Row="1" Margin="0,15,0,15">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<chartingprimitives:EdgePanel x:Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}" Grid.Column="0" >
<Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" />
<Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" />
</chartingprimitives:EdgePanel>
</Grid>
<dataviz:Legend x:Name="Legend" Header="{TemplateBinding LegendTitle}" Style="{TemplateBinding LegendStyle}" Grid.Row="2"/>
</Grid>
</Border>
</ControlTemplate>
你怎麼知道有一個StackPanel?我可以在哪裏找到某種參考圖表是如何在裏面製作的? – Kamil 2017-03-24 12:29:38
上面的問題已經在7年多前回答了......我實在不記得了。您可以查看http://silverlight.codeplex.com/SourceControl/latest獲取源代碼。它可能有幫助。 – Ryan 2017-03-24 16:46:34