즐겁게 개발을...

개발보다 게임이 더 많이 올라오는 것 같은...

개발/C# + DevExpress

DevExpress Skin & Skin Palette 동시 적용 및 가져오기

다물칸 2023. 9. 12. 10:32
728x90
반응형

예전에는 스킨만 선택하면 됐는데 요즘에는 스킨 안에 색배열.. 제목에서 말한 스킨 팔렛이 또 존재합니다. 

함수하나로 동시 적용하는 게 있으면 좋겠습니다만, 아직 제가 못 찾은 건지 없는 건지... 좀 코드가 많지만 소개해 봅니다. 

 

스킨 동시적용하기

대략적인 코드의 주석은 아래 참조해주시고요. 

GClass.LoginUser는 전역객체입니다. 로그인 사용자 별로 스킨을 적용할 수 있도록 하였습니다. 둘다 이름을 저장하기 때문에 String객체입니다.

// 스킨을 적용합니다. (요건 기존과 같습니다.)
UserLookAndFeel.Default.SkinName = GClass.LoginUser.skin;

// 현재 스킨을 가져와 객체에 담는다.
var skin = CommonSkins.GetSkin(UserLookAndFeel.Default);
// 저장된 이름으로 팔레트를 가져온다.
DevExpress.Utils.Svg.SvgPalette svgPalette = skin.CustomSvgPalettes[GClass.LoginUser.skinstyle];
// 가져온 팔레트를 적용한다.
skin.SvgPalettes[Skin.DefaultSkinPaletteName].CustomPalette = svgPalette;
// 룩앤필을 강제 적용한다.
LookAndFeelHelper.ForceDefaultLookAndFeelChanged();

 

현재 스킨 및 스킨 팔렛트 가져오기

// 현재 스킨을 저장
GClass.LoginUser.skin = LookAndFeel.ActiveSkinName;

// 위 코드랑 비스무리하죠? 
var commonSkin = CommonSkins.GetSkin(UserLookAndFeel.Default);
DevExpress.Utils.Svg.SvgPalette customPallete = commonSkin.SvgPalettes[DevExpress.Skins.Skin.DefaultSkinPaletteName].CustomPalette;
// 요기만 현재 스킨의 커스텀 팔레트 중 이름으로 찾는 코드입니다.
string name = commonSkin.CustomSvgPalettes.FirstOrDefault(x => x.Value == customPallete).Key?.Name;
// 스킨 팔레트를 저장
GClass.LoginUser.skinstyle = name;

 

더 간편한 코드가 있으면 덧글 남겨주세요.

반응형