LiveChart에 VisualElement를 추가하는 코드입니다.
Y축 간격을 재 설정하고, Y축에 평행한 선과 "X Line"이라는 글자를 삽입하겠습니다.
1. 기존 Chart의 AxisY와 VisualElements를 Clear() 하여 초기화 해줍니다.
public LiveCharts.WinForms.CartesianChart Graph;
Graph.AxisY.Clear();
Graph.VisualElements.Clear();
2. Y축 간격을 재 설정 합니다.
Graph.AxisY.Add(new Axis
{
Name = "Name",
Title = "Title",
Foreground = System.Windows.Media.Brushes.Black,
Separator = new LiveCharts.Wpf.Separator
{
Step = 1,
}
});
3. Y축에 평행한 선과 "X Line"이라는 Text value를 가진 UIElement를 그래프에 Add 합니다.
[NullReferenceException]
Graph.VisualElements.Add(new VisualElement
{
X = 0.5,
Y = 0,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Top,
UIElement = new TextBlock
{
Foreground = Brushes.Blue,
Text = "X Line",
FontSize = 12,
Opacity = 0.6
}
});
이때, UIElement에서 NullReferenceException이 발생합니다. UIElement 속성을 주석 처리 후 해당 코드를 수행하면 NullReferenceException이 발생하지 않습니다.
관련 글을 열심히 찾아보고 NullReferenceException을 해결하였는데요, AxesCollection 쪽에 버그가 있다는 사실을 알게 되었습니다. (해당 사이트는 하단에 기재하였습니다. :) )
해당 글에 따르면, Chart의 AxesCollection을 Clear 한 후 새로운 요소를 Add 할 필요가 없다고 합니다.
즉, 초기화와 추가 필요 없이 기존 요소를 변경해주면 해당 사항이 적용됩니다.
실제로, Graph.AxisY.Clear() 를 주석 처리 후 코드를 실행했는데, 정상적으로 작동했습니다!
1. (AxisY.Clear → AxisY.Add) 대신 AxisY[0]의 기존 요소를 변경해줍니다.
Graph.AxisY[0].Separator.Step = 1;
2. 코드 실행 시, 정상 작동이 확인됩니다.
AxesCollection의 버그가 VisualElement에도 영향이 있다는 것을 알게 되었어요. 아무리 찾아봐도 답이 안 나와서 조금 고생했지만, 그나마 해결 방안을 찾아서 다행입니다.
[결론]
원인
AxisY.Clear()
→ AxesCollection.Clear가 VisualElement.Add에도 영향이 있음.
해결 방법
Y축을 지우거나(Clear) 새로 추가(Add) 할 필요 없이 기존 축에서 변경만 하면 됨.
참고 사이트
'개발 공부 > C# 학습' 카테고리의 다른 글
[C# 학습] DataGridView의 DataSource - DataTable? BindingList? (0) | 2023.07.14 |
---|---|
[C# 학습] DataTable 검색 기능(Select 이용) /DB 테이블 필드 이름 공백 (0) | 2022.12.13 |
[C# 학습] 자식 폼 호출 시 부모 폼 기능 비활성화(Form 호출 시 다른 Form 사용 막기, Controls 활용) (0) | 2022.11.25 |
[C# 학습] 자식 폼 하나만 활성화하기(Show() 폼 중복 실행 방지, FormClosing 활용) (2) | 2022.11.25 |
[C# 학습] C#으로 Excel Export, Excel 원하는 셀 위치에 이미지 삽입(worksheet.Paste) (0) | 2022.11.17 |