2026-01-26 18:56:53 +09:00

395 lines
15 KiB
C#

/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using AuroraUIComponent.UserControls.KeyValueBase;
using Hermes.Functional;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace AuroraUIComponent.UserControls {
/// <summary>
/// Interaction logic for UCKeyContentView.xaml
/// </summary>
public partial class UCKeyContentView : UCKeyValueBase {
private event RoutedEventHandler FoldingChangedEvent; // Binding 한 IsFolding Property changed event
public UCKeyContentView() {
InitializeComponent();
MainToggleButton.Checked += EvtHandlerMainToggleButtonChecked;
}
#region Depedency Properties
#region Content View 관련 Properties
public static readonly DependencyProperty ContentViewProperty
= DependencyProperty.Register(
nameof(ContentView),
typeof(object),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// 넣고자 하는 View Item
/// </summary>
public object ContentView {
get { return (object)GetValue(ContentViewProperty); }
set { SetValue(ContentViewProperty, value); }
}
#endregion
#region Util 관련 properties
public static readonly DependencyProperty IsShowHelperProperty
= DependencyProperty.Register(
nameof(IsShowHelper),
typeof(bool),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
false,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Helper Button 보여줄 지 여부
/// </summary>
public bool IsShowHelper {
get { return (bool)GetValue(IsShowHelperProperty); }
set { SetValue(IsShowHelperProperty, value); }
}
public static readonly DependencyProperty UseFoldingProperty
= DependencyProperty.Register(
nameof(UseFolding),
typeof(bool),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
true,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Folding (접었다 폈다) 기능 사용 여부
/// </summary>
public bool UseFolding {
get { return (bool)GetValue(UseFoldingProperty); }
set { SetValue(UseFoldingProperty, value); }
}
public static readonly DependencyProperty IsFoldingProperty
= DependencyProperty.Register(
nameof(IsFolding),
typeof(bool),
typeof(UCKeyContentView), new FrameworkPropertyMetadata(
false,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// 현재 Folding 상태 여부
/// </summary>
public bool IsFolding {
get { return (bool)GetValue(IsFoldingProperty); }
set {
//if(IsFolding != value && UseFoldingButton) { TextValue.Visibility = value ? Visibility.Collapsed : Visibility.Visible; }
if (UseFoldingButton) {
if ((bool)GetValue(IsFoldingProperty) != value) {
SetValue(IsFoldingProperty, value);
if (FoldingChangedEvent != null) {
FoldingChangedEvent(this, new RoutedEventArgs());
}
}
}
}
}
#endregion
#region Folding Button 관련 Properties
public static readonly DependencyProperty UseFoldingButtonProperty
= DependencyProperty.Register(
nameof(UseFoldingButton),
typeof(bool),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
true,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Folding Button 사용할 지 여부 ( Key Value가 아닌 별도 작은 button )
/// </summary>
public bool UseFoldingButton {
get { return (bool)GetValue(UseFoldingButtonProperty); }
set { SetValue(UseFoldingButtonProperty, value); }
}
public static readonly DependencyProperty FoldingBtnStyleProperty
= DependencyProperty.Register(
nameof(FoldingBtnStyle),
typeof(Style),
typeof(UCKeyContentView),
new PropertyMetadata(null));
/// <summary>
/// Folding Button 스타일 ( Key Value가 아닌 별도 작은 button )
/// </summary>
public Style FoldingBtnStyle {
get { return (Style)GetValue(FoldingBtnStyleProperty); }
set { SetValue(FoldingBtnStyleProperty, value); }
}
public static readonly DependencyProperty FoldingBtnMarginProperty
= DependencyProperty.Register(
nameof(FoldingBtnMargin),
typeof(Thickness),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new Thickness(0),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Folding Button Margin ( Key Value가 아닌 별도 작은 button )
/// </summary>
public Thickness FoldingBtnMargin {
get { return (Thickness)GetValue(FoldingBtnMarginProperty); }
set { SetValue(FoldingBtnMarginProperty, value); }
}
public static readonly DependencyProperty FoldingBtnWidthProperty
= DependencyProperty.Register(
nameof(FoldingBtnWidth),
typeof(double),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
10.0,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Folding Button Width ( Key Value가 아닌 별도 작은 button )
/// </summary>
public double FoldingBtnWidth {
get { return (double)GetValue(FoldingBtnWidthProperty); }
set { SetValue(FoldingBtnWidthProperty, value); }
}
public static readonly DependencyProperty FoldingBtnHeightProperty
= DependencyProperty.Register(
nameof(FoldingBtnHeight),
typeof(double),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
10.0,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Folding Button Margin ( Key Value가 아닌 별도 작은 button )
/// </summary>
public double FoldingBtnHeight {
get { return (double)GetValue(FoldingBtnHeightProperty); }
set { SetValue(FoldingBtnHeightProperty, value); }
}
#endregion
#region Key / Value Content 관련 Properties
public static readonly DependencyProperty KeyTextMarginProperty
= DependencyProperty.Register(
nameof(KeyTextMargin),
typeof(Thickness),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new Thickness(5,2,5,2),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Value Content Margin
/// </summary>
public Thickness KeyTextMargin {
get { return (Thickness)GetValue(KeyTextMarginProperty); }
set { SetValue(KeyTextMarginProperty, value); }
}
public static readonly DependencyProperty ValueMarginProperty
= DependencyProperty.Register(
nameof(ValueMargin),
typeof(Thickness),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new Thickness(0),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Content Key를 담고있는 Toggle Button의 Border의 brush color
/// </summary>
public SolidColorBrush KeyBorderBrushColor {
get { return (SolidColorBrush)GetValue(KeyBorderBrushColorProperty); }
set { SetValue(KeyBorderBrushColorProperty, value); }
}
public static readonly DependencyProperty KeyBorderBrushColorProperty
= DependencyProperty.Register(
nameof(KeyBorderBrushColor),
typeof(SolidColorBrush),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new SolidColorBrush(Colors.Transparent),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
/// <summary>
/// Folding Button Margin ( Key Value가 아닌 별도 작은 button )
/// </summary>
public Thickness ValueMargin {
get { return (Thickness)GetValue(ValueMarginProperty); }
set { SetValue(ValueMarginProperty, value); }
}
public static readonly DependencyProperty ValueVerticalAlignmentProperty
= DependencyProperty.Register(
nameof(ValueVerticalAlignment),
typeof(VerticalAlignment),
typeof(UCKeyContentView),
new PropertyMetadata(VerticalAlignment.Center));
/// <summary>
/// Content Value의 Vertical Alignment brush color
/// </summary>
public VerticalAlignment ValueVerticalAlignment {
get { return (VerticalAlignment)GetValue(ValueVerticalAlignmentProperty); }
set { SetValue(ValueVerticalAlignmentProperty, value); }
}
public static readonly DependencyProperty ValueBorderBrushColorProperty
= DependencyProperty.Register(
nameof(ValueBorderBrushColor),
typeof(SolidColorBrush),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
(SolidColorBrush)Application.Current.Resources["MahApps.Brushes.Aurora.Datagrid.Border"],
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
/// <summary>
/// Content Value를 담고있는 Border의 brush color
/// </summary>
public SolidColorBrush ValueBorderBrushColor {
get { return (SolidColorBrush)GetValue(ValueBorderBrushColorProperty); }
set { SetValue(ValueBorderBrushColorProperty, value); }
}
public static readonly DependencyProperty ValueBorderThicknessProperty
= DependencyProperty.Register(
nameof(ValueBorderThickness),
typeof(Thickness),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new Thickness(2),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Content Value를 담고있는 Border의 Thickness
/// ( 기본 2 , Main Key Toggle Button의 Border size 가 2)
/// </summary>
public Thickness ValueBorderThickness {
get { return (Thickness)GetValue(ValueBorderThicknessProperty); }
set { SetValue(ValueBorderThicknessProperty, value); }
}
public static readonly DependencyProperty KeyBorderCornerRadiusProperty
= DependencyProperty.Register(
nameof(KeyBorderCornerRadius),
typeof(CornerRadius),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new CornerRadius(0),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
));
/// <summary>
/// Content Value를 담고있는 Border의 cornerRadius
/// ( 기본 2 , Main Key Toggle Button의 Border size 가 2)
/// </summary>
public CornerRadius KeyBorderCornerRadius {
get { return (CornerRadius)GetValue(KeyBorderCornerRadiusProperty); }
set { SetValue(KeyBorderCornerRadiusProperty, value); }
}
#endregion
#region 색상
/// <summary>
/// Key를 담고있는 Toggle Button의 Border의 brush color
/// </summary>
public SolidColorBrush KeyTextIsMouseOverBgColor {
get { return (SolidColorBrush)GetValue(KeyTextIsMouseOverBgColorProperty); }
set { SetValue(KeyTextIsMouseOverBgColorProperty, value); }
}
public static readonly DependencyProperty KeyTextIsMouseOverBgColorProperty
= DependencyProperty.Register(
nameof(KeyTextIsMouseOverBgColor),
typeof(SolidColorBrush),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new SolidColorBrush(Colors.Gray),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public SolidColorBrush KeyTextCheckedBgColor {
get { return (SolidColorBrush)GetValue(KeyTextCheckedBgColorProperty); }
set { SetValue(KeyTextCheckedBgColorProperty, value); }
}
public static readonly DependencyProperty KeyTextCheckedBgColorProperty
= DependencyProperty.Register(
nameof(KeyTextCheckedBgColor),
typeof(SolidColorBrush),
typeof(UCKeyContentView),
new FrameworkPropertyMetadata(
new SolidColorBrush(Colors.DarkRed),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
#endregion
#endregion
#region 기능성 Methods
protected override void KeyTextChanged(string newValue) {
}
/// <summary>
/// Folding 변경하기
/// </summary>
/// <param name="fold"> True : 접기 | False : 펴기 </param>
public void ChangeFold(bool fold) {
IsFolding = fold;
}
/// <summary>
/// (외부에서 접근) Folding Change 될 때 Event handler Setting 하기
/// </summary>
/// <param name="eventHandler">연결할 Event handler </param>
public void SetFoldingChangedEventHandler(RoutedEventHandler eventHandler) {
MainToggleButton.Click += eventHandler;
FoldingChangedEvent += eventHandler;
}
private void EvtHandlerMainToggleButtonChecked(object sender, RoutedEventArgs e)
{
if (!UseFolding && sender is ToggleButton toggleBtn) {
toggleBtn.IsChecked = false;
}
}
#endregion
}
}