하아찡
[C#/WPF] PublicColor 프로젝트 본문
UI쪽 컬러를 저장하고 불러와서 적용하는 방식을 사용하기위해 작업함.
Colors.cs
using FileIO;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Windows.Media;
namespace PublicColor
{
public class Colors : BindableBase
{
private static Colors colorinstance;
public static Colors Colorinstance
{
get
{
if (colorinstance == null) colorinstance = new Colors();
return colorinstance;
}
}
#region Models
//해당 색상을 베이스로 약간 변경 할 예정
private Brush colorbid; //매수 기본색
public Brush ColorBid
{
get { return colorbid; }
set { SetProperty(ref colorbid, value);}
}
private Brush colorbidback; //매수 기본 배경색
public Brush ColorBidBack
{
get { return colorbidback; }
set { SetProperty(ref colorbidback, value); }
}
private Brush colorask; //매도 기본색
public Brush ColorAsk
{
get { return colorask; }
set { SetProperty(ref colorask, value); }
}
private Brush coloraskback; //매도 기본 배경색
public Brush ColorAskBack
{
get { return coloraskback; }
set { SetProperty(ref coloraskback, value); }
}
private Brush colortext; //기본 텍스트색
public Brush ColorText
{
get { return colortext; }
set { SetProperty(ref colortext, value); }
}
public Brush colorback; //기본 배경색
public Brush ColorBack
{
get { return colorback; }
set { SetProperty(ref colorback, value); }
}
private Brush colorborder; //기본 배경색에 대한 테두리 색
public Brush ColorBorder
{
get { return colorborder; }
set { SetProperty(ref colorborder, value); }
}
private Brush colordefault;
public Brush ColorDefault
{
get { return colordefault; }
set { SetProperty(ref colordefault, value); }
}
private Brush colordefaultback;
public Brush ColorDefaultBack
{
get { return colordefaultback; }
set { SetProperty(ref colordefaultback, value); }
}
//기본 색상 추후 커스텀 색상 파일로 저장 후 로드
private Dictionary<string, string> DirColors;
private string nonecolor = "FF0000";
//파일 관련 변수
private FncFileIO fileIO = new FncFileIO();
private string FilePath = "Setting";
private string FileName = "Color";
#endregion Models
#region Event
public delegate void EventHandler();
public static event EventHandler ColorUpdate;
#endregion Event
#region Functions
private void DefaultColors()
{
DirColors = new Dictionary<string, string>();
DirColors.Add("backopacity", "66");
DirColors.Add("bid", "DD2323");
DirColors.Add("ask", "244993");
DirColors.Add("text", "333333");
DirColors.Add("back", "FFFFFF");
DirColors.Add("defaluttext", "333333");
DirColors.Add("defalutback", "FFFFFF");
}
private string ReverseColor(string color)
{
string val = "";
byte R = (byte)(255 - Convert.ToByte((color[0].ToString() + color[1].ToString()), 16));
byte G = (byte)(255 - Convert.ToByte((color[2].ToString() + color[3].ToString()), 16));
byte B = (byte)(255 - Convert.ToByte((color[4].ToString() + color[5].ToString()), 16));
val = $"{R:X2}{G:X2}{B:X2}";
return val;
}
private void SetColors()
{
var bc = new BrushConverter();
string backopacity = GetColor("backopacity");
string bid = GetColor("bid");
string ask = GetColor("ask");
string text = GetColor("text");
string back = GetColor("back");
string defaluttext = GetColor("defaluttext");
string defalutback = GetColor("defalutback");
ColorBid = (Brush)bc.ConvertFrom($"#FF{bid}");
ColorBidBack = (Brush)bc.ConvertFrom($"#{backopacity}{bid}");
ColorAsk = (Brush)bc.ConvertFrom($"#FF{ask}");
ColorAskBack = (Brush)bc.ConvertFrom($"#{backopacity}{ask}");
ColorText = (Brush)bc.ConvertFrom($"#FF{text}");
ColorBack = (Brush)bc.ConvertFrom($"#FF{back}");
ColorBorder = (Brush)bc.ConvertFrom($"#FF{ReverseColor(back)}");
ColorDefault = (Brush)bc.ConvertFrom($"#FF{defaluttext}");
ColorDefaultBack = (Brush)bc.ConvertFrom($"#{backopacity}{defalutback}");
}
private void SaveColors()
{
fileIO.FileWrite<Dictionary<string, string>>(FilePath, FileName, DirColors);
}
private void LoadColors()
{
DirColors = fileIO.FileRead<Dictionary<string, string>>(FilePath,FileName);
}
#endregion
public void SetTest(ref Brush chang, Brush brush)
{
chang = brush;
}
public Colors()
{
LoadColors();
//읽어온 색상이 없을경우 기본설정된 컬러를 불러옴.
if(DirColors is null)
{
//기존 컬러를 저장하고
DefaultColors();
//저장된 기본컬러를 파일로 저장.
SaveColors();
}
SetColors();
}
public void SetColor()
{
SetColors();
ColorUpdate();
}
/// <summary>
/// 딕셔너리에 저장된 값을 불러옴.
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private string GetColor(string name)
{
string Color = "";
try
{
Color = DirColors[name];
}
catch (Exception e)
{
Color = nonecolor;
}
return Color;
}
/// <summary>
/// 딕셔너리에 저장된 값으 변경
/// </summary>
/// <param name="key"></param>
/// <param name="color"></param>
/// <returns></returns>
public bool SetColor(string key,string color)
{
bool b = true;
try
{
DirColors[key] = color;
}
catch (Exception e)
{
b = false;
}
return b;
}
/// <summary>
/// 컬러를 등록시켜줌
/// </summary>
/// <param name="key"></param>
/// <param name="color"></param>
public void AddColor(string key, string color)
{
DirColors.Add(key, color);
SaveColors();
}
/// <summary>
/// DirColors에서 직접적으로 컬러값을 가져옴.
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public Brush DirGetColor(string key)
{
var bc = new BrushConverter();
return (Brush)bc.ConvertFrom($"#FF{GetColor(key)}");
}
/// <summary>
/// 목록 불러옴.
/// </summary>
/// <returns></returns>
public Dictionary<string, string> GetColorList()
{
return DirColors;
}
}
}
색정보 저장 및 로드
private void SaveColors()
{
fileIO.FileWrite<Dictionary<string, string>>(FilePath, FileName, DirColors);
}
private void LoadColors()
{
DirColors = fileIO.FileRead<Dictionary<string, string>>(FilePath,FileName);
}
기존에 만들어두었던 FileIO를 사용했습니다.
컬러 등록 및 목록
/// <summary>
/// 컬러를 등록시켜줌
/// </summary>
/// <param name="key"></param>
/// <param name="color"></param>
public void AddColor(string key, string color)
{
DirColors.Add(key, color);
SaveColors();
}
/// <summary>
/// 목록 불러옴.
/// </summary>
/// <returns></returns>
public Dictionary<string, string> GetColorList()
{
return DirColors;
}
현재 사용은 안하고 나중에 사용하기 위해 만들어둠.
색 변경
/// <summary>
/// 딕셔너리에 저장된 값으 변경
/// </summary>
/// <param name="key"></param>
/// <param name="color"></param>
/// <returns></returns>
public bool SetColor(string key,string color)
{
bool b = true;
try
{
DirColors[key] = color;
}
catch (Exception e)
{
b = false;
}
return b;
}
DirColors에 해당 키값이 있을경우 색상을 변경한다.
변경 후 꼭 SetColor() 함수를 호출해줘야함. 그래야 UI쪽에 색상들을 변경시키는 이벤트를 발생시킴.
색 코드 얻기
/// <summary>
/// 딕셔너리에 저장된 값을 불러옴.
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private string GetColor(string name)
{
string Color = "";
try
{
Color = DirColors[name];
}
catch (Exception e)
{
Color = nonecolor;
}
return Color;
}
DirColors에 등록된 색상값을 Key값을 통해 색상 코드얻어옴. 해당 색상코드를 Brush로 변경해주는 작업을 해줘야함.
반응형
'C# > 코인프로그램 - 코드' 카테고리의 다른 글
[C#/WPF] Upbit프로젝트 Order (0) | 2023.11.30 |
---|---|
[C#/WPF] Upbit 프로젝트 CoinOrder - 1 (0) | 2023.11.30 |
[C#/WPF] Upbit프로젝트 CoinList (1) | 2023.11.29 |
[C#/WPF] Upbit프로젝트 BidAskList (0) | 2023.11.29 |
[C#/WPF] Upbit프로젝트 Balance (1) | 2023.11.29 |