2 * Copyright(c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.ComponentModel;
19 using Tizen.NUI.BaseComponents;
20 using Tizen.NUI.Binding;
22 namespace Tizen.NUI.Components
25 /// Button is one kind of common component, a button clearly describes what action will occur when the user selects it.
26 /// Button may contain text or an icon.
28 /// <since_tizen> 6 </since_tizen>
29 public class Button : Control
31 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
32 [EditorBrowsable(EditorBrowsableState.Never)]
33 public static readonly BindableProperty IconRelativeOrientationProperty = BindableProperty.Create(nameof(IconRelativeOrientation), typeof(IconOrientation?), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
35 var instance = (Button)bindable;
38 instance.privateIconRelativeOrientation = (IconOrientation?)newValue;
41 defaultValueCreator: (bindable) =>
43 var instance = (Button)bindable;
44 return instance.privateIconRelativeOrientation;
46 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
47 [EditorBrowsable(EditorBrowsableState.Never)]
48 public static readonly BindableProperty IsEnabledProperty = BindableProperty.Create(nameof(IsEnabled), typeof(bool), typeof(Button), true, propertyChanged: (bindable, oldValue, newValue) =>
50 var instance = (Button)bindable;
53 instance.privateIsEnabled = (bool)newValue;
56 defaultValueCreator: (bindable) =>
58 var instance = (Button)bindable;
59 return instance.privateIsEnabled;
61 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
62 [EditorBrowsable(EditorBrowsableState.Never)]
63 public static readonly BindableProperty IsSelectedProperty = BindableProperty.Create(nameof(IsSelected), typeof(bool), typeof(Button), true, propertyChanged: (bindable, oldValue, newValue) =>
65 var instance = (Button)bindable;
68 instance.privateIsSelected = (bool)newValue;
71 defaultValueCreator: (bindable) =>
73 var instance = (Button)bindable;
74 return instance.privateIsSelected;
76 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
77 [EditorBrowsable(EditorBrowsableState.Never)]
78 public static readonly BindableProperty IsSelectableProperty = BindableProperty.Create(nameof(IsSelectable), typeof(bool), typeof(Button), true, propertyChanged: (bindable, oldValue, newValue) =>
80 var instance = (Button)bindable;
83 instance.privateIsSelectable = (bool)newValue;
86 defaultValueCreator: (bindable) =>
88 var instance = (Button)bindable;
89 return instance.privateIsSelectable;
91 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
92 [EditorBrowsable(EditorBrowsableState.Never)]
93 public static readonly BindableProperty IconPaddingProperty = BindableProperty.Create(nameof(IconPadding), typeof(Extents), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
95 var instance = (Button)bindable;
96 if (null != newValue && null != instance.Style?.IconPadding)
98 instance.Style.IconPadding.CopyFrom((Extents)newValue);
99 instance.UpdateUIContent();
102 defaultValueCreator: (bindable) =>
104 var instance = (Button)bindable;
105 return instance.Style?.IconPadding;
107 /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
108 [EditorBrowsable(EditorBrowsableState.Never)]
109 public static readonly BindableProperty TextPaddingProperty = BindableProperty.Create(nameof(TextPadding), typeof(Extents), typeof(Button), null, propertyChanged: (bindable, oldValue, newValue) =>
111 var instance = (Button)bindable;
112 if (null != newValue && null != instance.Style?.TextPadding)
114 instance.Style.TextPadding.CopyFrom((Extents)newValue);
115 instance.UpdateUIContent();
118 defaultValueCreator: (bindable) =>
120 var instance = (Button)bindable;
121 return instance.Style?.TextPadding;
124 private ImageView overlayImage;
126 private TextLabel buttonText;
127 private ImageView buttonIcon;
129 private EventHandler<StateChangedEventArgs> stateChangeHander;
131 private bool isSelected = false;
132 private bool isEnabled = true;
133 private bool isPressed = false;
138 /// Creates a new instance of a Button.
140 /// <since_tizen> 6 </since_tizen>
141 public Button() : base()
147 /// Creates a new instance of a Button with style.
149 /// <param name="style">Create Button by special style defined in UX.</param>
150 /// <since_tizen> 8 </since_tizen>
151 public Button(string style) : base(style)
157 /// Creates a new instance of a Button with style.
159 /// <param name="buttonStyle">Create Button by style customized by user.</param>
160 /// <since_tizen> 8 </since_tizen>
161 public Button(ButtonStyle buttonStyle) : base(buttonStyle)
167 /// An event for the button clicked signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
169 /// <since_tizen> 6 </since_tizen>
170 public event EventHandler<ClickEventArgs> ClickEvent;
172 /// An event for the button state changed signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
174 /// <since_tizen> 6 </since_tizen>
175 public event EventHandler<StateChangedEventArgs> StateChangedEvent
179 stateChangeHander += value;
183 stateChangeHander -= value;
187 /// Icon orientation.
189 /// <since_tizen> 6 </since_tizen>
190 public enum IconOrientation
195 /// <since_tizen> 6 </since_tizen>
200 /// <since_tizen> 6 </since_tizen>
205 /// <since_tizen> 6 </since_tizen>
210 /// <since_tizen> 6 </since_tizen>
215 /// Style of the button.
217 /// <since_tizen> 8 </since_tizen>
218 public new ButtonStyle Style => ViewStyle as ButtonStyle;
221 /// The text of Button.
223 /// <since_tizen> 6 </since_tizen>
228 return Style?.Text?.Text?.GetValue(ControlState);
232 if (null != Style?.Text)
234 Style.Text.Text = value;
240 /// Flag to decide Button can be selected or not.
242 /// <since_tizen> 6 </since_tizen>
243 public bool IsSelectable
247 return (bool)GetValue(IsSelectableProperty);
251 SetValue(IsSelectableProperty, value);
255 private bool privateIsSelectable
259 return Style?.IsSelectable ?? false;
263 Style.IsSelectable = value;
268 /// Translate text string in Button.
270 /// <since_tizen> 6 </since_tizen>
271 public string TranslatableText
275 return Style?.Text?.TranslatableText?.All;
279 if (null != Style?.Text)
281 Style.Text.TranslatableText = value;
287 /// Text point size in Button.
289 /// <since_tizen> 6 </since_tizen>
290 public float PointSize
294 return Style?.Text?.PointSize?.All ?? 0;
298 if (null != Style?.Text)
300 Style.Text.PointSize = value;
306 /// Text font family in Button.
308 /// <since_tizen> 6 </since_tizen>
309 public string FontFamily
313 return Style?.Text?.FontFamily.All;
317 if (null != Style?.Text)
319 Style.Text.FontFamily = value;
324 /// Text color in Button.
326 /// <since_tizen> 6 </since_tizen>
327 public Color TextColor
331 return Style?.Text?.TextColor?.All;
335 if (null != Style?.Text)
337 Style.Text.TextColor = value;
342 /// Text horizontal alignment in Button.
344 /// <since_tizen> 6 </since_tizen>
345 public HorizontalAlignment TextAlignment
349 return Style?.Text?.HorizontalAlignment ?? HorizontalAlignment.Center;
353 if (null != Style?.Text)
355 Style.Text.HorizontalAlignment = value;
360 /// Icon image's resource url in Button.
362 /// <since_tizen> 6 </since_tizen>
363 public string IconURL
367 return Style?.Icon?.ResourceUrl?.All;
371 if (null != Style?.Icon)
373 Style.Icon.ResourceUrl = value;
378 private StringSelector textSelector = new StringSelector();
380 /// Text string selector in Button.
382 /// <since_tizen> 6 </since_tizen>
383 public StringSelector TextSelector
391 textSelector.Clone(value);
395 private StringSelector translatableTextSelector = new StringSelector();
397 /// Translateable text string selector in Button.
399 /// <since_tizen> 6 </since_tizen>
400 public StringSelector TranslatableTextSelector
404 return translatableTextSelector;
408 translatableTextSelector.Clone(value);
412 private ColorSelector textColorSelector = new ColorSelector();
414 /// Text color selector in Button.
416 /// <since_tizen> 6 </since_tizen>
417 public ColorSelector TextColorSelector
421 return textColorSelector;
425 textColorSelector.Clone(value);
429 private FloatSelector pointSizeSelector = new FloatSelector();
431 /// Text font size selector in Button.
433 /// <since_tizen> 6 </since_tizen>
434 public FloatSelector PointSizeSelector
438 return pointSizeSelector;
442 pointSizeSelector.Clone(value);
446 private StringSelector iconURLSelector = new StringSelector();
448 /// Icon image's resource url selector in Button.
450 /// <since_tizen> 6 </since_tizen>
451 public StringSelector IconURLSelector
455 return iconURLSelector;
459 iconURLSelector.Clone(value);
464 /// Flag to decide selected state in Button.
466 /// <since_tizen> 6 </since_tizen>
467 public bool IsSelected
471 return (bool)GetValue(IsSelectedProperty);
475 SetValue(IsSelectedProperty, value);
478 private bool privateIsSelected
491 /// Flag to decide enable or disable in Button.
493 /// <since_tizen> 6 </since_tizen>
494 public bool IsEnabled
498 return (bool)GetValue(IsEnabledProperty);
502 SetValue(IsEnabledProperty, value);
505 private bool privateIsEnabled
519 /// Icon relative orientation in Button, work only when show icon and text.
521 /// <since_tizen> 6 </since_tizen>
522 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
523 [EditorBrowsable(EditorBrowsableState.Never)]
524 public IconOrientation? IconRelativeOrientation
528 return (IconOrientation?)GetValue(IconRelativeOrientationProperty);
532 SetValue(IconRelativeOrientationProperty, value);
535 private IconOrientation? privateIconRelativeOrientation
539 return Style?.IconRelativeOrientation;
543 if(Style != null && Style.IconRelativeOrientation != value)
545 Style.IconRelativeOrientation = value;
552 /// Icon padding in Button, work only when show icon and text.
554 /// <since_tizen> 6 </since_tizen>
555 public Extents IconPadding
557 get => (Extents)GetValue(IconPaddingProperty);
558 set => SetValue(IconPaddingProperty, value);
562 /// Text padding in Button, work only when show icon and text.
564 /// <since_tizen> 6 </since_tizen>
565 public Extents TextPadding
567 get => (Extents) GetValue(TextPaddingProperty);
568 set => SetValue(TextPaddingProperty, value);
572 /// Dispose Button and all children on it.
574 /// <param name="type">Dispose type.</param>
575 /// <since_tizen> 6 </since_tizen>
576 protected override void Dispose(DisposeTypes type)
583 if (type == DisposeTypes.Explicit)
585 if (buttonIcon != null)
587 Utility.Dispose(buttonIcon);
589 if (buttonText != null)
591 Utility.Dispose(buttonText);
593 if (overlayImage != null)
595 Utility.Dispose(overlayImage);
602 /// Called after a key event is received by the view that has had its focus set.
604 /// <param name="key">The key event.</param>
605 /// <returns>True if the key event should be consumed.</returns>
606 /// <since_tizen> 6 </since_tizen>
607 public override bool OnKey(Key key)
609 if (null == key) return false;
610 if (key.State == Key.StateType.Down)
612 if (key.KeyPressedName == "Return")
618 ClickEventArgs eventArgs = new ClickEventArgs();
623 else if (key.State == Key.StateType.Up)
625 if (key.KeyPressedName == "Return")
628 if (Style.IsSelectable != null && Style.IsSelectable == true)
630 isSelected = !isSelected;
635 return base.OnKey(key);
639 /// Called when the control gain key input focus. Should be overridden by derived classes if they need to customize what happens when the focus is gained.
641 /// <since_tizen> 6 </since_tizen>
642 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
643 [EditorBrowsable(EditorBrowsableState.Never)]
644 public override void OnFocusGained()
646 base.OnFocusGained();
651 /// Called when the control loses key input focus. Should be overridden by derived classes if they need to customize what happens when the focus is lost.
653 /// <since_tizen> 6 </since_tizen>
654 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
655 [EditorBrowsable(EditorBrowsableState.Never)]
656 public override void OnFocusLost()
663 /// Tap gesture event callback.
665 /// <param name="source">Source which recieved touch event.</param>
666 /// <param name="e">Tap gesture event argument.</param>
667 /// <since_tizen> 6 </since_tizen>
668 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
669 [EditorBrowsable(EditorBrowsableState.Never)]
670 protected override void OnTapGestureDetected(object source, TapGestureDetector.DetectedEventArgs e)
674 ClickEventArgs eventArgs = new ClickEventArgs();
676 base.OnTapGestureDetected(source, e);
680 /// Called after a touch event is received by the owning view.<br />
681 /// CustomViewBehaviour.REQUIRES_TOUCH_EVENTS must be enabled during construction. See CustomView(ViewWrapperImpl.CustomViewBehaviour behaviour).<br />
683 /// <param name="touch">The touch event.</param>
684 /// <returns>True if the event should be consumed.</returns>
685 /// <since_tizen> 6 </since_tizen>
686 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
687 [EditorBrowsable(EditorBrowsableState.Never)]
688 public override bool OnTouch(Touch touch)
690 if (null == touch) return false;
691 PointStateType state = touch.GetState(0);
695 case PointStateType.Down:
699 case PointStateType.Interrupted:
703 case PointStateType.Up:
705 if (Style.IsSelectable != null && Style.IsSelectable == true)
707 isSelected = !isSelected;
714 return base.OnTouch(touch);
718 /// Apply style to button.
720 /// <param name="viewStyle">The style to apply.</param>
721 /// <since_tizen> 8 </since_tizen>
722 public override void ApplyStyle(ViewStyle viewStyle)
724 base.ApplyStyle(viewStyle);
726 ButtonStyle buttonStyle = viewStyle as ButtonStyle;
728 if (null != buttonStyle)
730 if (null == overlayImage)
732 overlayImage = new ImageView()
734 WidthResizePolicy = ResizePolicyType.FillToParent,
735 HeightResizePolicy = ResizePolicyType.FillToParent
737 this.Add(overlayImage);
740 if (null == buttonText)
742 buttonText = new TextLabel();
743 this.Add(buttonText);
746 if (null == buttonIcon)
748 buttonIcon = new ImageView();
749 this.Add(buttonIcon);
752 overlayImage.ApplyStyle(buttonStyle.Overlay);
753 buttonText.ApplyStyle(buttonStyle.Text);
754 buttonIcon.ApplyStyle(buttonStyle.Icon);
759 /// Get Button style.
761 /// <returns>The default button style.</returns>
762 /// <since_tizen> 8 </since_tizen>
763 protected override ViewStyle GetViewStyle()
765 return new ButtonStyle();
768 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
769 [EditorBrowsable(EditorBrowsableState.Never)]
770 protected override void OnUpdate()
777 /// Update Button State.
779 /// <since_tizen> 6 </since_tizen>
780 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
781 [EditorBrowsable(EditorBrowsableState.Never)]
782 protected void UpdateState()
784 ControlStates sourceState = ControlState;
785 ControlStates targetState;
789 targetState = isPressed ? ControlStates.Pressed : (IsFocused ? (IsSelected ? ControlStates.SelectedFocused : ControlStates.Focused) : (IsSelected ? ControlStates.Selected : ControlStates.Normal));
793 targetState = IsSelected ? ControlStates.DisabledSelected : (IsFocused ? ControlStates.DisabledFocused : ControlStates.Disabled);
796 if(sourceState != targetState)
798 ControlState = targetState;
802 StateChangedEventArgs e = new StateChangedEventArgs
804 PreviousState = sourceState,
805 CurrentState = targetState
807 stateChangeHander?.Invoke(this, e);
812 /// It is hijack by using protected, style copy problem when class inherited from Button.
814 /// <since_tizen> 6 </since_tizen>
815 private void Initialize()
817 if (null == Style.IconRelativeOrientation) Style.IconRelativeOrientation = IconOrientation.Left;
819 LayoutDirectionChanged += OnLayoutDirectionChanged;
823 /// Measure text, it can be override.
825 /// <since_tizen> 6 </since_tizen>
826 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
827 [EditorBrowsable(EditorBrowsableState.Never)]
828 protected virtual void MeasureText()
830 if (Style.IconRelativeOrientation == null || buttonIcon == null || buttonText == null)
834 buttonText.WidthResizePolicy = ResizePolicyType.Fixed;
835 buttonText.HeightResizePolicy = ResizePolicyType.Fixed;
836 int textPaddingStart = Style.TextPadding.Start;
837 int textPaddingEnd = Style.TextPadding.End;
838 int textPaddingTop = Style.TextPadding.Top;
839 int textPaddingBottom = Style.TextPadding.Bottom;
841 int iconPaddingStart = Style.IconPadding.Start;
842 int iconPaddingEnd = Style.IconPadding.End;
843 int iconPaddingTop = Style.IconPadding.Top;
844 int iconPaddingBottom = Style.IconPadding.Bottom;
846 if (IconRelativeOrientation == IconOrientation.Top || IconRelativeOrientation == IconOrientation.Bottom)
848 buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd;
849 buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom - iconPaddingTop - iconPaddingBottom - buttonIcon.SizeHeight;
853 buttonText.SizeWidth = SizeWidth - textPaddingStart - textPaddingEnd - iconPaddingStart - iconPaddingEnd - buttonIcon.SizeWidth;
854 buttonText.SizeHeight = SizeHeight - textPaddingTop - textPaddingBottom;
858 /// Layout child, it can be override.
860 /// <since_tizen> 6 </since_tizen>
861 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
862 [EditorBrowsable(EditorBrowsableState.Never)]
863 protected virtual void LayoutChild()
865 if (Style.IconRelativeOrientation == null || buttonIcon == null || buttonText == null)
870 int textPaddingStart = Style.TextPadding.Start;
871 int textPaddingEnd = Style.TextPadding.End;
872 int textPaddingTop = Style.TextPadding.Top;
873 int textPaddingBottom = Style.TextPadding.Bottom;
875 int iconPaddingStart = Style.IconPadding.Start;
876 int iconPaddingEnd = Style.IconPadding.End;
877 int iconPaddingTop = Style.IconPadding.Top;
878 int iconPaddingBottom = Style.IconPadding.Bottom;
880 switch (IconRelativeOrientation)
882 case IconOrientation.Top:
883 buttonIcon.PositionUsesPivotPoint = true;
884 buttonIcon.ParentOrigin = NUI.ParentOrigin.TopCenter;
885 buttonIcon.PivotPoint = NUI.PivotPoint.TopCenter;
886 buttonIcon.Position2D = new Position2D(0, iconPaddingTop);
888 buttonText.PositionUsesPivotPoint = true;
889 buttonText.ParentOrigin = NUI.ParentOrigin.BottomCenter;
890 buttonText.PivotPoint = NUI.PivotPoint.BottomCenter;
891 buttonText.Position2D = new Position2D(0, -textPaddingBottom);
893 case IconOrientation.Bottom:
894 buttonIcon.PositionUsesPivotPoint = true;
895 buttonIcon.ParentOrigin = NUI.ParentOrigin.BottomCenter;
896 buttonIcon.PivotPoint = NUI.PivotPoint.BottomCenter;
897 buttonIcon.Position2D = new Position2D(0, -iconPaddingBottom);
899 buttonText.PositionUsesPivotPoint = true;
900 buttonText.ParentOrigin = NUI.ParentOrigin.TopCenter;
901 buttonText.PivotPoint = NUI.PivotPoint.TopCenter;
902 buttonText.Position2D = new Position2D(0, textPaddingTop);
904 case IconOrientation.Left:
905 if (LayoutDirection == ViewLayoutDirectionType.LTR)
907 buttonIcon.PositionUsesPivotPoint = true;
908 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
909 buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
910 buttonIcon.Position2D = new Position2D(iconPaddingStart, 0);
912 buttonText.PositionUsesPivotPoint = true;
913 buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
914 buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
915 buttonText.Position2D = new Position2D(-textPaddingEnd, 0);
919 buttonIcon.PositionUsesPivotPoint = true;
920 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
921 buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
922 buttonIcon.Position2D = new Position2D(-iconPaddingStart, 0);
924 buttonText.PositionUsesPivotPoint = true;
925 buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
926 buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
927 buttonText.Position2D = new Position2D(textPaddingEnd, 0);
931 case IconOrientation.Right:
932 if (LayoutDirection == ViewLayoutDirectionType.RTL)
934 buttonIcon.PositionUsesPivotPoint = true;
935 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterLeft;
936 buttonIcon.PivotPoint = NUI.PivotPoint.CenterLeft;
937 buttonIcon.Position2D = new Position2D(iconPaddingEnd, 0);
939 buttonText.PositionUsesPivotPoint = true;
940 buttonText.ParentOrigin = NUI.ParentOrigin.CenterRight;
941 buttonText.PivotPoint = NUI.PivotPoint.CenterRight;
942 buttonText.Position2D = new Position2D(-textPaddingStart, 0);
946 buttonIcon.PositionUsesPivotPoint = true;
947 buttonIcon.ParentOrigin = NUI.ParentOrigin.CenterRight;
948 buttonIcon.PivotPoint = NUI.PivotPoint.CenterRight;
949 buttonIcon.Position2D = new Position2D(-iconPaddingEnd, 0);
951 buttonText.PositionUsesPivotPoint = true;
952 buttonText.ParentOrigin = NUI.ParentOrigin.CenterLeft;
953 buttonText.PivotPoint = NUI.PivotPoint.CenterLeft;
954 buttonText.Position2D = new Position2D(textPaddingStart, 0);
960 if (string.IsNullOrEmpty(buttonText.Text))
962 buttonIcon.ParentOrigin = NUI.ParentOrigin.Center;
963 buttonIcon.PivotPoint = NUI.PivotPoint.Center;
967 /// Theme change callback when theme is changed, this callback will be trigger.
969 /// <param name="sender">The sender</param>
970 /// <param name="e">The event data</param>
971 /// <since_tizen> 8 </since_tizen>
972 protected override void OnThemeChangedEvent(object sender, StyleManager.ThemeChangeEventArgs e)
974 ButtonStyle buttonStyle = StyleManager.Instance.GetViewStyle(style) as ButtonStyle;
975 if (buttonStyle != null)
977 Style.CopyFrom(buttonStyle);
982 private void UpdateUIContent()
987 Sensitive = isEnabled;
990 private void OnLayoutDirectionChanged(object sender, LayoutDirectionChangedEventArgs e)
996 private void OnClick(ClickEventArgs eventArgs)
998 ClickEvent?.Invoke(this, eventArgs);
1001 private void OnIconRelayout(object sender, EventArgs e)
1008 /// ClickEventArgs is a class to record button click event arguments which will sent to user.
1010 /// <since_tizen> 6 </since_tizen>
1011 public class ClickEventArgs : EventArgs
1015 /// StateChangeEventArgs is a class to record button state change event arguments which will sent to user.
1017 /// <since_tizen> 6 </since_tizen>
1018 public class StateChangedEventArgs : EventArgs
1020 /// <summary> previous state of Button </summary>
1021 /// <since_tizen> 6 </since_tizen>
1022 public ControlStates PreviousState;
1023 /// <summary> current state of Button </summary>
1024 /// <since_tizen> 6 </since_tizen>
1025 public ControlStates CurrentState;