创建列图时,您应用了许多组件. (参见下面的示例XAML).有没有人知道你是否可以在其中一个元素上设置属性,这些元素指的是列之间空白区域的宽度?
<charting:Chart Height="600" WIDth="auto" HorizontalAlignment="Stretch" name="MyChart" title="Column Graph" Legendtitle="Legend"> <charting:ColumnSerIEs name="theColumnSerIEs" title="SerIEs A" IndependentValueBinding="{Binding Path=name}" DependentValueBinding="{Binding Path=Population}" margin="0" > </charting:ColumnSerIEs> <charting:Chart.Axes> <charting:linearaxis OrIEntation="Y" Minimum="200000" Maximum="2500000" ShowGrIDlines="True" /> <charting:categoryAxis name="chartcategoryAxis" /> </charting:Chart.Axes> </charting:Chart>解决方法 在没有神奇的答案的情况下,我从codeplex下载了wpftoolkit代码.
通过阅读代码,我可以在方法ColumnSerIEs.UpdateDataPoint中看到,有这行代码:
double segmentWIDth = coordinaterangeWIDth * 0.8;
所以这是一个非常明确的“否”,你不能通过设置公共属性来改变列之间的差距.
我将尝试的解决方案是编写一个继承自ColumnSerIEs并覆盖UpdateDataPoint的新类.
稍后编辑
好的,我让它上班了.如果有人感兴趣,我附上了HistogramSerIEs类的完整代码.
public class HistogramSerIEs : ColumnSerIEs,ISerIEs{ protected overrIDe voID UpdateDataPoint(DataPoint dataPoint) { // That set the height and wIDth. base.UpdateDataPoint(dataPoint); // Now we overrIDe the part about setting the wIDth object category = dataPoint.ActualindependentValue; var coordinaterange = GetcategoryRange(category); double minimum = (double)coordinaterange.Minimum.Value; double maximum = (double)coordinaterange.Maximum.Value; double coordinaterangeWIDth = (maximum - minimum); const int WIDTH_MulTIPLIER = 1; // Harcoded to 0.8 in the parent. Could make this a dependency property double segmentWIDth = coordinaterangeWIDth * WIDTH_MulTIPLIER; var columnSerIEs = SerIEsHost.SerIEs.OfType<ColumnSerIEs>().Where(serIEs => serIEs.ActualindependentAxis == ActualindependentAxis); int numberOfSerIEs = columnSerIEs.Count(); double columnWIDth = segmentWIDth / numberOfSerIEs; int serIEsIndex = columnSerIEs.IndexOf(this); double offset = serIEsIndex * Math.Round(columnWIDth) + coordinaterangeWIDth * 0.1; double dataPointX = minimum + offset; double left = Math.Round(dataPointX); double wIDth = Math.Round(columnWIDth); Canvas.Setleft(dataPoint,left); dataPoint.WIDth = wIDth; } #region ISerIEs Members System.Collections.ObjectModel.ObservableCollection<object> ISerIEs.LegendItems { get { return base.LegendItems; } } #endregion #region IRequireSerIEsHost Members ISerIEsHost IRequireSerIEsHost.SerIEsHost { get { return base.SerIEsHost;} set { base.SerIEsHost = value; } } #endregion}// copIEd from the DataVisualization library// (It was an internal class)static class MyEnumerableFunctions{ public static int IndexOf(this IEnumerable that,object value) { int index = 0; foreach (object item in that) { if (object.ReferenceEquals(value,item) || value.Equals(item)) { return index; } index++; } return -1; }}总结
以上是内存溢出为你收集整理的wpf – 绘制列之间没有空格的列图全部内容,希望文章能够帮你解决wpf – 绘制列之间没有空格的列图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)