2012-05-18 2 views
1

Использование элементов управления MSchart несколько сложно из-за отсутствия информации о части темы XML.Применение темы по умолчанию к серии диаграмм

Я создаю диаграмму программно и динамически, а затем добавляю тему к ней, используя файл темы XML.

Я не знаю, сколько будет серий, но я пытаюсь добавить одну серию для общей суммы на каждый столбец в StackedColumnBar.

Поэтому я создаю каждую серию в цикле foreach из данных, а затем добавляю ряды Total в виде типа пузырьковой диаграммы.

Теперь я должен применить другую серию к серии Total, и пусть все остальные имеют одну и ту же тему.

Я попытался назвать серию «Всего» в обоих файлах диаграммы и темы. Настоящий улов - это Шаблон = «Все», потому что это нигде не документировано, поэтому я понятия не имею, как все это действительно работает и как оно применяется.

Пример темы:

<Chart BackColor="White" 
     BorderWidth="2" 
     Palette = "None" 
     PaletteCustomColors="#F29E39; #007463; #E76E34; #A4A4A4; #94BBA3;" 
     BorderlineDashStyle="Solid" 
     AntiAliasing="All"> 
    <Series> 
    <Series Name="Total" 
     BorderWidth="0" 
     LabelForeColor="#FF000000" 
     LabelFormat="C" 
     IsVisibleInLegend="false" 
     IsValueShownAsLabel="true" > 
    </Series> 
    <Series _Template_="All" 
      BorderWidth="0" 
      LabelForeColor="#AAFFFFFF" 
      LabelFormat="C" 
      CustomProperties="PointWidth=0.9, DrawingStyle=LightToDark" 
      IsValueShownAsLabel="false" > 
    </Series> 
    </Series> 
    <ChartAreas> 
    <ChartArea Name="Default" 
       _Template_="All" 
       BorderWidth="0"> 
     <AxisY IsInterlaced="true" 
      InterlacedColor="#E8E7DC"> 
     <MajorGrid Enabled="false" /> 
     </AxisY> 
     <AxisX> 
     <MajorGrid Enabled="false" /> 
     </AxisX> 
    </ChartArea> 
    </ChartAreas> 
    <Legends> 
    <Legend _Template_="All" 
      Alignment="Center" 
      LegendItemOrder="ReversedSeriesOrder" 
      Docking="Bottom"/> 
    </Legends> 
</Chart> 

ответ

0

Потому что мы хотим, чтобы добавить Series для существующей области диаграммы его лучше использовать databindXY в код, например:

var query = ... select new 
{ 
sumXValue = .., 
sumYValue = .. 
} //chart datasource 

chart1.datasource = query; 

Series series = new Series(); series.Name = "Total"; 
series.ChartType = SeriesChartType.StackedColumn; 
series.Points.DataBindXY(query, sumXvalue, query.sumYValue); 
chart1.Series.Add(series); 

это будет добавление новой серии в существующая серия в chartarea

+0

Добавление серии никогда не было проблемой. Он добавляет конкретный шаблон к определенной серии в XML, который я не знаю, как это сделать. –

+0

извините за недоразумение, но почему вы используете много шаблонов на одном ChartArea, насколько я знаю, только 1 шаблон может быть применен к 1 ChartArea, если ваш план не использует много ChartArea? –

+0

Я пытался сделать последний пузырь с общим значением, плавающим над стеком. Возможно, есть еще один способ сделать это? –

0

Я знаю, что это старое сообщение, но я столкнулся, когда я пытался решить ту же проблему в последнее время. Если вы используете шаблон XML, вы можете просто добавить элемент для каждой серии в свои данные, даже если вы добавляете данные во время выполнения, просто убедитесь, что порядок рядов совпадает с порядком добавления данных и работает без каких-либо вопрос. Я проверил комбинацию карт с этим методом, и он работает хорошо.

<Series> 
    <Series Name="FirstSeriesName" Borderwidth="0"></Series> 
    <Series Name="SecondSeriesName" Borderwidth="0"></Series> 
    <Series Name="ThirdSeriesName" Borderwidth="3"></Series> 
</Series> 

Я не понял, как совместить это с Темой вариантом, но прямо сейчас, к сожалению, похоже, вам придется укладывать каждую серию в отдельности, чтобы использовать эту тему XML (или изменить варианты для одной серии во время выполнения).

Смежные вопросы