하아찡

WPF - 차트(4) 본문

C#/코인프로그램 - 진행상황

WPF - 차트(4)

하아찡 2022. 8. 5. 19:50

완료

- 분봉버튼 추가완료

- 휠돌릴시 확대 축소기능 추가

- 해당 차트 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)  (0) 2022.08.04
WPF - 차트(2)  (0) 2022.08.04
WPF - 차트(1)  (0) 2022.08.03