하아찡
WPF - 차트(4) 본문
완료
- 분봉버튼 추가완료
- 휠돌릴시 확대 축소기능 추가
- 해당 차트 Max,Min값 출력 및 최소시간, 최대시간 출력
수정이 필요한부분
- 휠돌릴시 해당 부분 차트에서 확대를해야하는데 단순 확대 축소만함.
- 해당 분봉을 눌렀을때 현재 분봉이 어떤건지 버튼에 색상같은걸 줘야할듯.
추가해야할부분
- 현재 차트와 이전 차트를 가져와서 합치는 작업은 완료했고, 남은작업은 실시간으로 현재 각 분봉데이터를 받아와 처리해야함.
일단 여기서 차트 부분은 마무리하고 매수 / 매도 창을 만든후
수정이 필요한부분과 추가해야할 부분을 손볼예정
프로그램창
변경된 XAML
<Grid x:Name="grid" Background="Transparent" ClipToBounds="True" SizeChanged="GridResize" >
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<StackPanel
PreviewMouseLeftButtonDown="PreviewDown" PreviewMouseLeftButtonUp="PreviewUp" MouseMove="MouseMove" MouseWheel="sPanelMouseWheel"
Orientation="Horizontal" x:Name="wPanel" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" Background="Black">
<Popup x:Name="popInfo"
IsOpen="False"
StaysOpen="False"
Placement="MousePoint">
<Border Width="100" Height="60" Background="Aqua"/>
</Popup>
</StackPanel>
<Rectangle Grid.Row="2" Grid.Column="0" Height="1" Fill="Gray" HorizontalAlignment="Stretch" Margin="0,-20,0,0"/>
<Rectangle Grid.Row="0" Grid.Column="2" Width="1" Fill="Gray" VerticalAlignment="Stretch" Margin="0,0,49,0"/>
<Grid Grid.Row="1" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Label x:Name="LabelMax" Content="Max" Grid.Row="0" Height="40" />
<Label x:Name="LabelMin" Content="Min" Grid.Row="2" Height="40" Grid.RowSpan="2" />
</Grid>
<Grid Grid.Row="2" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<Label x:Name="LabelTimeMin" Content="Min" Grid.Column="0" Height="40" Margin="0,-4,0,-16" />
<Label x:Name="LabelTimeMax" Content="Max" Grid.Column="2" Height="40" Margin="0,-4,0,-16" />
</Grid>
<Grid Grid.Row="0" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Button Content="1" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="1" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
<Button Content="3" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="2" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
<Button Content="5" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="3" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
<Button Content="10" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="4" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
<Button Content="15" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="5" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
<Button Content="30" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="6" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
<Button Content="60" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="7" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
<Button Content="240" Click="Btnmin_Click" Grid.ColumnSpan="1" Grid.Column="8" HorizontalAlignment="Left" Width="50" Margin="0,0,0,0" VerticalAlignment="Center"/>
</Grid>
</Grid>
변경된 코드 및 추가된 코드
private void MouseMove(object sender, MouseEventArgs e)
{
//현재 마우스좌표 저장 휠확대시 현재 마우스포인터가 어디에있는지 확인하기위해
MousePanelX = e.GetPosition(wPanel).X;
if (e.LeftButton == MouseButtonState.Pressed && sender == movingObject)
{
//감도 0.5값이 적당하다고봄.
double newLeft = (e.GetPosition(wPanel).X - firstXPos) * 0.5;
//double newTop = (e.GetPosition(wPanel).Y - firstYPos) * 0.3;
//Margin Left값을줘서 X축을 기준으로 이동하는것처럼 보이게함
Thickness newMargin = wPanel.Margin;
newMargin.Left += newLeft;
//newMargin.Top += newTop;
//우측 끝으로 못가게
if ((newMargin.Left * -1) > ((keeptm.Count-5) * section))
return;
firstXPos = e.GetPosition(wPanel).X;
//firstYPos = e.GetPosition(wPanel).Y;
wPanel.Margin = newMargin;
//데이터 로드부분
if (newMargin.Left > 0 && Coin != null)
{
DrawBars();
//왜 로드후 끊어지는 모션이 나오는지 잘모르겠음 일단 킵
newMargin.Left = -(section * ShowBars);
wPanel.Margin = newMargin;
}
if(Coin != null)
{
GetViewChart();
}
}
}
private void Btnmin_Click(object sender, RoutedEventArgs e)
{
//해당버튼 Min값
min = Convert.ToInt32(((Button)(sender)).Content);
//현재차트가 작동중일때
if(Coin != "")
{
GetChart(Coin);
}
}
//마우스 휠
private void sPanelMouseWheel(object sender, MouseWheelEventArgs e) {
Thickness margin = wPanel.Margin;
double AddMargin = (10 * section);
if (e.Delta > 0) {
ShowBars -= 10;
if (ShowBars < 10)
ShowBars = 10;
else
{
//GetViewChart();
if(MousePanelX - AddMargin > 0)
margin.Left = margin.Left - AddMargin;
}
}
else if (e.Delta < 0)
{
ShowBars += 10;
if (ShowBars > 300)
ShowBars = 300;
else
margin.Left = margin.Left + AddMargin;
}
wPanel.Margin = margin;
GetViewChart();
}
반응형
'C# > 코인프로그램 - 진행상황' 카테고리의 다른 글
WPF - 호가창 (0) | 2022.08.14 |
---|---|
WPF - 업비트 중간 진행사항 (0) | 2022.08.05 |
WPF - 차트(3) (1) | 2022.08.04 |
WPF - 차트(2) (0) | 2022.08.04 |
WPF - 차트(1) (0) | 2022.08.03 |