私は古いDundasチャートコンポーネント(ver 7)を使って簡単な体温計のようなチャートを生成するコードをいくつか持っています。System.Web.UI.DataVisualization.Chartingでカスタムラベルの幅を制御する方法
'Imports Dundas, Dundas.Charting, Dundas.Charting.WebControl
Public Shared Function GetSimpleThermometerChart(ByVal currentValue As Integer, ByVal goalValue As Integer) As Stream
If goalValue < 0 Then goalValue = 0
If currentValue < 0 Then currentValue = 0
If currentValue > goalValue Then currentValue = goalValue
Dim red = Drawing.Color.FromArgb(255, 192, 80, 77)
Dim chart1 = New Chart()
Dim series1 = chart1.Series.Add("Series1")
Dim defaultArea = chart1.ChartAreas.Add("Default")
With chart1
.Legends(0).Enabled = False
.Height = New System.Web.UI.WebControls.Unit(200)
.Width = New System.Web.UI.WebControls.Unit(275)
End With
With defaultArea
.BorderStyle = ChartDashStyle.Solid
' Y-axis
.AxisY2.MajorGrid.Enabled = True
.AxisY2.Interval = goalValue/2
.AxisY2.Maximum = goalValue
.AxisY2.LabelStyle.Interval = goalValue
.AxisY2.MajorTickMark.Interval = goalValue/2
.AxisY2.MajorTickMark.Enabled = False
.AxisY2.LabelStyle.Font = New System.Drawing.Font("Tahoma", 10)
.AxisY2.CustomLabels.Add((goalValue * 0.45), (goalValue * 0.55), String.Format(" You're half way to your goal of {0}!", goalValue))
.AxisY2.CustomLabels.Add((goalValue * 0.9), (goalValue * 0.99), String.Format(" You met the goal of {0}!!!", goalValue))
' X-axis
.AxisX.MajorGrid.Enabled = False
.AxisX.Maximum = 1
.AxisX.Minimum = 0.8
.AxisX.LabelStyle.Enabled = False
.AxisX.MajorTickMark.Enabled = False
End With
' Populate series data
Dim pt1 = New DataPoint(1, currentValue)
series1.Points.Add(pt1)
With series1
.Type = SeriesChartType.Column
.Color = red
.YAxisType = AxisType.Secondary
End With
Dim memStrm As New MemoryStream()
chart1.Save(memStrm, ChartImageFormat.Png)
memStrm.Position = 0
Return memStrm
End Function
このコードによって生成チャートは右Y軸上のカスタムラベルの完全な、非切り捨てられたテキストを左に素敵な、小さなグラフを示しています。ここではそのコードです。
は、Microsoftが買収し、.NET 4.0フレームワークにダンダスのチャートコンポーネントを統合し、私はチャートは同じように機能かどうかを確認するためにテストされています。もちろん、私は瞬時に不一致に遭遇しました。新しいSystem.Web.UI.DataVisualization.Charting
同等に上記のコードを変換するには、私は次のコードで羽目になる:
'Imports System.Web.UI.DataVisualization.Charting
Public Shared Function GetSimpleThermometerChart(ByVal currentValue As Integer, ByVal goalValue As Integer) As Stream
If goalValue < 0 Then goalValue = 0
If currentValue < 0 Then currentValue = 0
If currentValue > goalValue Then currentValue = goalValue
Dim red = Drawing.Color.FromArgb(255, 192, 80, 77)
Dim chart1 = New Chart()
Dim series1 = chart1.Series.Add("Series1")
Dim defaultArea = chart1.ChartAreas.Add("Default")
With chart1
.Height = New System.Web.UI.WebControls.Unit(200)
.Width = New System.Web.UI.WebControls.Unit(275)
End With
With defaultArea
'.InnerPlotPosition.Height = 100 ' YUCK! Why???
'.InnerPlotPosition.Width = 20 ' YUCK! Why???
.BorderDashStyle = ChartDashStyle.Solid
' Y-axis
.AxisY2.MajorGrid.Enabled = True
.AxisY2.Interval = goalValue/2
.AxisY2.Maximum = goalValue
.AxisY2.LabelStyle.Interval = goalValue
.AxisY2.MajorTickMark.Interval = goalValue/2
.AxisY2.MajorTickMark.Enabled = False
.AxisY2.LabelStyle.Font = New System.Drawing.Font("Tahoma", 10)
.AxisY2.CustomLabels.Add((goalValue * 0.45), (goalValue * 0.55), String.Format(" You're half way to your goal of {0}!", goalValue))
.AxisY2.CustomLabels.Add((goalValue * 0.9), (goalValue * 0.99), String.Format(" You met the goal of {0}!!!", goalValue))
' X-axis
.AxisX.MajorGrid.Enabled = False
.AxisX.Maximum = 1
.AxisX.Minimum = 0.8
.AxisX.LabelStyle.Enabled = False
.AxisX.MajorTickMark.Enabled = False
End With
' Populate series data
Dim pt1 = New DataPoint(1, currentValue)
series1.Points.Add(pt1)
With series1
.ChartType = SeriesChartType.Column
.Color = red
.YAxisType = AxisType.Secondary
End With
Dim memStrm As New MemoryStream()
chart1.SaveImage(memStrm, ChartImageFormat.Png)
memStrm.Position = 0
Return memStrm
End Function
さて、代わりに私のカスタムラベルのフルテキストを表示するには、グラフのスケーリング、グラフは太って、テキスト成長しますelipsisで切り捨てられます。私は運がないダンダスの行動をどうやって得るのか探しました。私はさまざまな設定を試みました:
With defaultArea
.AxisY2.IsLabelAutoFit = True
.AxisY2.LabelAutoFitStyle = LabelAutoFitStyles.None
.AxisY2.LabelStyle.TruncatedLabels = False
End With
これらは動作しません。私はこれを行う場合、私は仕事に行くことができるように思えてきた唯一のものは、次のとおりです。
With defaultArea
.InnerPlotPosition.Height = 100 ' YUCK! Why??? Seems brittle...
.InnerPlotPosition.Width = 20 ' YUCK! Why??? Seems brittle...
End With
このコードのトラブルは、私は私がの大きさについて何よりも、テキストのサイズについてもっと気にということです
グラフが表示され、テキストが常に表示されることが期待されます。この実例のテキストはハードコードされていますが、実際のシステムではグラフサイズを動的にする必要はありませんので、カスタムラベルは常にフォントサイズを拡大することなくテキストを表示します。古いDundasコンポーネントからのデフォルト動作を模倣する方法に関する提案はありますか?
私は実際にこのラインで設定したフォントを持っています.Drawing.Font( "Tahoma"、10) '。問題は、私はフォントが収縮するのを望んでいない、私はグラフを縮小することを好むだろう。フォントを縮小すると、テキスト全体が表示されますが、グラフを縮小することができれば、省略記号なしで10ptにテキストのための余裕ができます。私はDundasのバージョンが適切に機能するので、これを知っています。 – mattmc3