[NUI] Binding DISPATCH_KEY_EVENTS
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / BaseComponents / View.cs
1 /*
2  * Copyright(c) 2021 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17 using System;
18 using System.Collections.Generic;
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
21 using Tizen.NUI.Binding;
22
23 namespace Tizen.NUI.BaseComponents
24 {
25     /// <summary>
26     /// View is the base class for all views.
27     /// </summary>
28     /// <since_tizen> 3 </since_tizen>
29     public partial class View : Container, IResourcesProvider
30     {
31         private static HashSet<BindableProperty> positionPropertyGroup = new HashSet<BindableProperty>();
32         private static HashSet<BindableProperty> sizePropertyGroup = new HashSet<BindableProperty>();
33         private static HashSet<BindableProperty> scalePropertyGroup = new HashSet<BindableProperty>();
34
35         internal BackgroundExtraData backgroundExtraData;
36
37         private bool layoutSet = false;
38         private LayoutItem layout; // Exclusive layout assigned to this View.
39
40         // List of transitions paired with the condition that uses the transition.
41         private Dictionary<TransitionCondition, TransitionList> layoutTransitions;
42         private int widthPolicy = LayoutParamPolicies.WrapContent; // Layout width policy
43         private int heightPolicy = LayoutParamPolicies.WrapContent; // Layout height policy
44         private float weight = 0.0f; // Weighting of child View in a Layout
45         private bool backgroundImageSynchronousLoading = false;
46         private bool excludeLayouting = false;
47         private LayoutTransition layoutTransition;
48         private TransitionOptions transitionOptions = null;
49         private ThemeData themeData;
50
51         // List of constraints
52         private Constraint widthConstraint = null;
53         private Constraint heightConstraint = null;
54         static View()
55         {
56             RegisterPropertyGroup(PositionProperty, positionPropertyGroup);
57             RegisterPropertyGroup(Position2DProperty, positionPropertyGroup);
58             RegisterPropertyGroup(PositionXProperty, positionPropertyGroup);
59             RegisterPropertyGroup(PositionYProperty, positionPropertyGroup);
60
61             RegisterPropertyGroup(SizeProperty, sizePropertyGroup);
62             RegisterPropertyGroup(Size2DProperty, sizePropertyGroup);
63             RegisterPropertyGroup(SizeWidthProperty, sizePropertyGroup);
64             RegisterPropertyGroup(SizeHeightProperty, sizePropertyGroup);
65
66             RegisterPropertyGroup(ScaleProperty, scalePropertyGroup);
67             RegisterPropertyGroup(ScaleXProperty, scalePropertyGroup);
68             RegisterPropertyGroup(ScaleYProperty, scalePropertyGroup);
69             RegisterPropertyGroup(ScaleZProperty, scalePropertyGroup);
70         }
71
72         /// <summary>
73         /// Creates a new instance of a view.
74         /// </summary>
75         /// <since_tizen> 3 </since_tizen>
76         public View() : this(Interop.View.New(), true)
77         {
78             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
79         }
80
81         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
82         [EditorBrowsable(EditorBrowsableState.Never)]
83         public View(ViewStyle viewStyle) : this(Interop.View.New(), true, viewStyle)
84         {
85         }
86
87         /// <summary>
88         /// Create a new instance of a View with setting the status of shown or hidden.
89         /// </summary>
90         /// <param name="shown">false : Not displayed (hidden), true : displayed (shown)</param>
91         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
92         [EditorBrowsable(EditorBrowsableState.Never)]
93         public View(bool shown) : this(Interop.View.New(), true)
94         {
95             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
96             SetVisible(shown);
97         }
98
99         internal View(View uiControl, bool shown = true) : this(Interop.View.NewView(View.getCPtr(uiControl)), true)
100         {
101             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
102             if (!shown)
103             {
104                 SetVisible(false);
105             }
106
107             backgroundExtraData = uiControl.backgroundExtraData == null ? null : new BackgroundExtraData(uiControl.backgroundExtraData);
108         }
109
110         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, ViewStyle viewStyle, bool shown = true) : this(cPtr, cMemoryOwn, shown)
111         {
112             InitializeStyle(viewStyle);
113         }
114
115         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(cPtr, cMemoryOwn)
116         {
117             if (HasBody())
118             {
119                 PositionUsesPivotPoint = false;
120             }
121
122             onWindowSendEventCallback = SendViewAddedEventToWindow;
123             using ViewSignal signal = new ViewSignal(Interop.ActorSignal.ActorOnSceneSignal(SwigCPtr), false);
124             signal?.Connect(onWindowSendEventCallback);
125
126             if (!shown)
127             {
128                 SetVisible(false);
129             }
130         }
131
132         internal View(ViewImpl implementation, bool shown = true) : this(Interop.View.NewViewInternal(ViewImpl.getCPtr(implementation)), true)
133         {
134             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
135
136             if (!shown)
137             {
138                 SetVisible(false);
139             }
140         }
141
142         /// <summary>
143         /// The event that is triggered when the View's ControlState is changed.
144         /// </summary>
145         [EditorBrowsable(EditorBrowsableState.Never)]
146         public event EventHandler<ControlStateChangedEventArgs> ControlStateChangedEvent;
147
148         internal event EventHandler<ControlStateChangedEventArgs> ControlStateChangeEventInternal;
149
150
151         /// <summary>
152         /// Flag to indicate if layout set explicitly via API call or View was automatically given a Layout.
153         /// </summary>
154         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
155         [EditorBrowsable(EditorBrowsableState.Never)]
156         public bool LayoutSet
157         {
158             get
159             {
160                 return layoutSet;
161             }
162         }
163
164         /// <summary>
165         /// Flag to allow Layouting to be disabled for Views.
166         /// Once a View has a Layout set then any children added to Views from then on will receive
167         /// automatic Layouts.
168         /// </summary>
169         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
170         [EditorBrowsable(EditorBrowsableState.Never)]
171         public static bool LayoutingDisabled { get; set; } = true;
172
173         /// <summary>
174         /// Deprecate. Please do not use this.
175         /// The style instance applied to this view.
176         /// Note that please do not modify the ViewStyle.
177         /// Modifying ViewStyle will affect other views with same ViewStyle.
178         /// </summary>
179         [EditorBrowsable(EditorBrowsableState.Never)]
180         protected ViewStyle ViewStyle
181         {
182             get
183             {
184                 if (themeData == null) themeData = new ThemeData();
185
186                 if (themeData.viewStyle == null)
187                 {
188                     ApplyStyle(CreateViewStyle());
189                 }
190                 return themeData.viewStyle;
191             }
192         }
193
194         /// <summary>
195         /// Get/Set the control state.
196         /// Note that the ControlState only available for the classes derived from Control.
197         /// If the classes that are not derived from Control (such as View, ImageView and TextLabel) want to use this system,
198         /// please set <see cref="EnableControlState"/> to true.
199         /// </summary>
200         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
201         [EditorBrowsable(EditorBrowsableState.Never)]
202         public ControlState ControlState
203         {
204             get
205             {
206                 return themeData == null ? ControlState.Normal : themeData.controlStates;
207             }
208             protected set
209             {
210                 if (ControlState == value)
211                 {
212                     return;
213                 }
214
215                 var prevState = ControlState;
216
217                 if (themeData == null) themeData = new ThemeData();
218                 themeData.controlStates = value;
219
220                 var changeInfo = new ControlStateChangedEventArgs(prevState, value);
221
222                 ControlStateChangeEventInternal?.Invoke(this, changeInfo);
223
224                 if (themeData.ControlStatePropagation)
225                 {
226                     foreach (View child in Children)
227                     {
228                         child.ControlState = value;
229                     }
230                 }
231
232                 OnControlStateChanged(changeInfo);
233
234                 ControlStateChangedEvent?.Invoke(this, changeInfo);
235             }
236         }
237
238         /// <summary>
239         /// Gets / Sets the status of whether the view is excluded from its parent's layouting or not.
240         /// </summary>
241         /// This will be public opened later after ACR done. Before ACR, need to be hidden as inhouse API.
242         [EditorBrowsable(EditorBrowsableState.Never)]
243         public bool ExcludeLayouting
244         {
245             get
246             {
247                 return (bool)GetValue(ExcludeLayoutingProperty);
248             }
249             set
250             {
251                 SetValue(ExcludeLayoutingProperty, value);
252                 NotifyPropertyChanged();
253             }
254         }
255
256         private bool InternalExcludeLayouting
257         {
258             get
259             {
260                 return excludeLayouting;
261             }
262             set
263             {
264                 excludeLayouting = value;
265                 if (Layout != null && Layout.SetPositionByLayout == value)
266                 {
267                     Layout.SetPositionByLayout = !value;
268                     Layout.RequestLayout();
269                 }
270             }
271         }
272
273         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
274         [EditorBrowsable(EditorBrowsableState.Never)]
275         public bool IsResourcesCreated
276         {
277             get
278             {
279                 return Application.Current.IsResourcesCreated;
280             }
281         }
282
283         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
284         [EditorBrowsable(EditorBrowsableState.Never)]
285         public ResourceDictionary XamlResources
286         {
287             get
288             {
289                 return Application.Current.XamlResources;
290             }
291             set
292             {
293                 Application.Current.XamlResources = value;
294             }
295         }
296
297         /// <summary>
298         /// The StyleName, type string.
299         /// The value indicates DALi style name defined in json theme file.
300         /// </summary>
301         /// <since_tizen> 3 </since_tizen>
302         public string StyleName
303         {
304             get
305             {
306                 return (string)GetValue(StyleNameProperty);
307             }
308             set
309             {
310                 SetValue(StyleNameProperty, value);
311                 NotifyPropertyChanged();
312             }
313         }
314
315         /// <summary>
316         /// The KeyInputFocus, type bool.
317         /// </summary>
318         [EditorBrowsable(EditorBrowsableState.Never)]
319         public bool KeyInputFocus
320         {
321             get
322             {
323                 return (bool)GetValue(KeyInputFocusProperty);
324             }
325             set
326             {
327                 SetValue(KeyInputFocusProperty, value);
328                 NotifyPropertyChanged();
329             }
330         }
331
332         /// <summary>
333         /// The mutually exclusive with "backgroundImage" and "background" type Vector4.
334         /// </summary>
335         /// <remarks>
336         /// <para>
337         /// The property cascade chaining set is possible. For example, this (view.BackgroundColor.X = 0.1f;) is possible.
338         /// </para>
339         /// <para>
340         /// Animatable - This property can be animated using <c>Animation</c> class.
341         /// <code>
342         /// animation.AnimateTo(view, "BackgroundColor", new Color(r, g, b, a));
343         /// </code>
344         /// </para>
345         /// </remarks>
346         /// <since_tizen> 3 </since_tizen>
347         public Color BackgroundColor
348         {
349             get
350             {
351                 Color temp = (Color)GetValue(BackgroundColorProperty);
352                 return new Color(OnBackgroundColorChanged, temp.R, temp.G, temp.B, temp.A);
353             }
354             set
355             {
356                 SetValue(BackgroundColorProperty, value);
357                 NotifyPropertyChanged();
358             }
359         }
360
361         /// <summary>
362         /// The mutually exclusive with "backgroundColor" and "background" type Map.
363         /// </summary>
364         /// <since_tizen> 3 </since_tizen>
365         public string BackgroundImage
366         {
367             get
368             {
369                 return (string)GetValue(BackgroundImageProperty);
370             }
371             set
372             {
373                 SetValue(BackgroundImageProperty, value);
374                 NotifyPropertyChanged();
375             }
376         }
377
378         /// <summary>
379         /// Get or set the border of background image.
380         /// </summary>
381         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
382         [EditorBrowsable(EditorBrowsableState.Never)]
383         public Rectangle BackgroundImageBorder
384         {
385             get
386             {
387                 return (Rectangle)GetValue(BackgroundImageBorderProperty);
388             }
389             set
390             {
391                 SetValue(BackgroundImageBorderProperty, value);
392                 NotifyPropertyChanged();
393             }
394         }
395
396         /// <summary>
397         /// The background of view.
398         /// </summary>
399         /// <since_tizen> 3 </since_tizen>
400         public Tizen.NUI.PropertyMap Background
401         {
402             get
403             {
404                 return (PropertyMap)GetValue(BackgroundProperty);
405             }
406             set
407             {
408                 SetValue(BackgroundProperty, value);
409                 NotifyPropertyChanged();
410             }
411         }
412
413         /// <summary>
414         /// Describes a shadow as an image for a View.
415         /// It is null by default.
416         /// </summary>
417         /// <remarks>
418         /// Getter returns copied instance of current shadow.
419         /// </remarks>
420         /// <remarks>
421         /// The mutually exclusive with "BoxShadow".
422         /// </remarks>
423         /// <remarks>
424         /// <para>
425         /// Animatable - This property can be animated using <c>Animation</c> class.
426         /// To animate this property, specify a sub-property with separator ".", for example, "ImageShadow.Offset".
427         /// <code>
428         /// animation.AnimateTo(view, "ImageShadow.Offset", new Vector2(10, 10));
429         /// </code>
430         /// Animatable sub-property : Offset.
431         /// </para>
432         /// </remarks>
433         [EditorBrowsable(EditorBrowsableState.Never)]
434         public ImageShadow ImageShadow
435         {
436             get
437             {
438                 return (ImageShadow)GetValue(ImageShadowProperty);
439             }
440             set
441             {
442                 SetValue(ImageShadowProperty, value);
443                 NotifyPropertyChanged();
444             }
445         }
446
447         /// <summary>
448         /// Describes a box shaped shadow drawing for a View.
449         /// It is null by default.
450         /// </summary>
451         /// <remarks>
452         /// The mutually exclusive with "ImageShadow".
453         /// </remarks>
454         /// <remarks>
455         /// <para>
456         /// Animatable - This property can be animated using <c>Animation</c> class.
457         /// To animate this property, specify a sub-property with separator ".", for example, "BoxShadow.BlurRadius".
458         /// <code>
459         /// animation.AnimateTo(view, "BoxShadow.BlurRadius", 10.0f);
460         /// </code>
461         /// Animatable sub-property : Offset, Color, BlurRadius.
462         /// </para>
463         /// </remarks>
464         /// <since_tizen> 9 </since_tizen>
465         public Shadow BoxShadow
466         {
467             get
468             {
469                 return (Shadow)GetValue(BoxShadowProperty);
470             }
471             set
472             {
473                 SetValue(BoxShadowProperty, value);
474                 NotifyPropertyChanged();
475             }
476         }
477
478         /// <summary>
479         /// The radius for the rounded corners of the View.
480         /// This will rounds background and shadow edges.
481         /// The values in Vector4 are used in clockwise order from top-left to bottom-left : Vector4(top-left-corner, top-right-corner, bottom-right-corner, bottom-left-corner).
482         /// Each radius will clamp internally to the half of smaller of the view's width or height.
483         /// Note that, an image background (or shadow) may not have rounded corners if it uses a Border property.
484         /// </summary>
485         /// <remarks>
486         /// <para>
487         /// Animatable - This property can be animated using <c>Animation</c> class.
488         /// <code>
489         /// animation.AnimateTo(view, "CornerRadius", new Vector4(10, 10, 10, 10));
490         /// </code>
491         /// </para>
492         /// </remarks>
493         /// <since_tizen> 9 </since_tizen>
494         public Vector4 CornerRadius
495         {
496             get
497             {
498                 return (Vector4)GetValue(CornerRadiusProperty);
499             }
500             set
501             {
502                 SetValue(CornerRadiusProperty, value);
503                 NotifyPropertyChanged();
504             }
505         }
506
507         /// <summary>
508         /// Whether the CornerRadius property value is relative (percentage [0.0f to 0.5f] of the view size) or absolute (in world units).
509         /// It is absolute by default.
510         /// When the policy is relative, the corner radius is relative to the smaller of the view's width and height.
511         /// </summary>
512         /// <since_tizen> 9 </since_tizen>
513         public VisualTransformPolicyType CornerRadiusPolicy
514         {
515             get => (VisualTransformPolicyType)GetValue(CornerRadiusPolicyProperty);
516             set => SetValue(CornerRadiusPolicyProperty, value);
517         }
518
519         /// <summary>
520         /// The width for the borderline of the View.
521         /// </summary>
522         /// <remarks>
523         /// <para>
524         /// Animatable - This property can be animated using <c>Animation</c> class.
525         /// <code>
526         /// animation.AnimateTo(view, "BorderlineWidth", 100.0f);
527         /// </code>
528         /// </para>
529         /// Note that, an image background may not have borderline if it uses the Border property.
530         /// </remarks>
531         /// <since_tizen> 9 </since_tizen>
532         public float BorderlineWidth
533         {
534             get
535             {
536                 return (float)GetValue(BorderlineWidthProperty);
537             }
538             set
539             {
540                 SetValue(BorderlineWidthProperty, value);
541                 NotifyPropertyChanged();
542             }
543         }
544
545         /// <summary>
546         /// The color for the borderline of the View.
547         /// It is Color.Black by default.
548         /// </summary>
549         /// <remarks>
550         /// <para>
551         /// Animatable - This property can be animated using <c>Animation</c> class.
552         /// <code>
553         /// animation.AnimateTo(view, "BorderlineColor", new Color(r, g, b, a));
554         /// </code>
555         /// </para>
556         /// </remarks>
557         /// <since_tizen> 9 </since_tizen>
558         public Color BorderlineColor
559         {
560             get
561             {
562                 return (Color)GetValue(BorderlineColorProperty);
563             }
564             set
565             {
566                 SetValue(BorderlineColorProperty, value);
567                 NotifyPropertyChanged();
568             }
569         }
570
571         /// <summary>
572         /// The Relative offset for the borderline of the View.
573         /// Recommended range : [-1.0f to 1.0f].
574         /// If -1.0f, draw borderline inside of the View.
575         /// If 1.0f, draw borderline outside of the View.
576         /// If 0.0f, draw borderline half inside and half outside.
577         /// It is 0.0f by default.
578         /// </summary>
579         /// <remarks>
580         /// <para>
581         /// Animatable - This property can be animated using <c>Animation</c> class.
582         /// <code>
583         /// animation.AnimateTo(view, "BorderlineOffset", -1.0f);
584         /// </code>
585         /// </para>
586         /// </remarks>
587         /// <since_tizen> 9 </since_tizen>
588         public float BorderlineOffset
589         {
590             get
591             {
592                 return (float)GetValue(BorderlineOffsetProperty);
593             }
594             set
595             {
596                 SetValue(BorderlineOffsetProperty, value);
597                 NotifyPropertyChanged();
598             }
599         }
600
601         /// <summary>
602         /// The current state of the view.
603         /// </summary>
604         /// <since_tizen> 3 </since_tizen>
605         public States State
606         {
607             get
608             {
609                 return (States)GetValue(StateProperty);
610             }
611             set
612             {
613                 SetValue(StateProperty, value);
614                 NotifyPropertyChanged();
615             }
616         }
617
618         /// <summary>
619         /// The current sub state of the view.
620         /// </summary>
621         /// <since_tizen> 3 </since_tizen>
622         public States SubState
623         {
624             get
625             {
626                 return (States)GetValue(SubStateProperty);
627             }
628             set
629             {
630                 SetValue(SubStateProperty, value);
631                 NotifyPropertyChanged();
632             }
633         }
634
635         /// <summary>
636         /// Displays a tooltip
637         /// </summary>
638         /// <since_tizen> 3 </since_tizen>
639         public Tizen.NUI.PropertyMap Tooltip
640         {
641             get
642             {
643                 return (PropertyMap)GetValue(TooltipProperty);
644             }
645             set
646             {
647                 SetValue(TooltipProperty, value);
648                 NotifyPropertyChanged();
649             }
650         }
651
652         /// <summary>
653         /// Displays a tooltip as a text.
654         /// </summary>
655         /// <since_tizen> 3 </since_tizen>
656         public string TooltipText
657         {
658             get
659             {
660                 return GetValue(TooltipTextProperty) as string;
661             }
662             set
663             {
664                 SetValue(TooltipTextProperty, value);
665             }
666         }
667
668         private string InternalTooltipText
669         {
670             get
671             {
672                 using (var propertyValue = GetProperty(Property.TOOLTIP))
673                 {
674                     if (propertyValue != null && propertyValue.Get(out string retrivedValue))
675                     {
676                         return retrivedValue;
677                     }
678                     NUILog.Error($"[ERROR] Fail to get TooltipText! Return error MSG (error to get TooltipText)!");
679                     return "error to get TooltipText";
680                 }
681             }
682             set
683             {
684                 var temp = new Tizen.NUI.PropertyValue(value);
685                 SetProperty(View.Property.TOOLTIP, temp);
686                 temp.Dispose();
687                 NotifyPropertyChanged();
688             }
689         }
690
691         /// <summary>
692         /// The Child property of FlexContainer.<br />
693         /// The proportion of the free space in the container, the flex item will receive.<br />
694         /// If all items in the container set this property, their sizes will be proportional to the specified flex factor.<br />
695         /// </summary>
696         /// <since_tizen> 3 </since_tizen>
697         [Obsolete("Deprecated in API8, will be removed in API10.")]
698         public float Flex
699         {
700             get
701             {
702                 return (float)GetValue(FlexProperty);
703             }
704             set
705             {
706                 SetValue(FlexProperty, value);
707                 NotifyPropertyChanged();
708             }
709         }
710
711         /// <summary>
712         /// The Child property of FlexContainer.<br />
713         /// The alignment of the flex item along the cross axis, which, if set, overrides the default alignment for all items in the container.<br />
714         /// </summary>
715         /// <since_tizen> 3 </since_tizen>
716         [Obsolete("Deprecated in API8, will be removed in API10.")]
717         public int AlignSelf
718         {
719             get
720             {
721                 return (int)GetValue(AlignSelfProperty);
722             }
723             set
724             {
725                 SetValue(AlignSelfProperty, value);
726                 NotifyPropertyChanged();
727             }
728         }
729
730         /// <summary>
731         /// The Child property of FlexContainer.<br />
732         /// The space around the flex item.<br />
733         /// </summary>
734         /// <remarks>
735         /// The property cascade chaining set is possible. For example, this (view.FlexMargin.X = 0.1f;) is possible.
736         /// </remarks>
737         /// <since_tizen> 3 </since_tizen>
738         [Obsolete("Deprecated in API8, will be removed in API10.")]
739         public Vector4 FlexMargin
740         {
741             get
742             {
743                 Vector4 temp = (Vector4)GetValue(FlexMarginProperty);
744                 return new Vector4(OnFlexMarginChanged, temp.X, temp.Y, temp.Z, temp.W);
745             }
746             set
747             {
748                 SetValue(FlexMarginProperty, value);
749                 NotifyPropertyChanged();
750             }
751         }
752
753         /// <summary>
754         /// The top-left cell this child occupies, if not set, the first available cell is used.
755         /// </summary>
756         /// <remarks>
757         /// The property cascade chaining set is possible. For example, this (view.CellIndex.X = 0.1f;) is possible.
758         /// Also, this property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
759         /// </remarks>
760         /// <since_tizen> 3 </since_tizen>
761         public Vector2 CellIndex
762         {
763             get
764             {
765                 Vector2 temp = (Vector2)GetValue(CellIndexProperty);
766                 return new Vector2(OnCellIndexChanged, temp.X, temp.Y);
767             }
768             set
769             {
770                 SetValue(CellIndexProperty, value);
771                 NotifyPropertyChanged();
772             }
773         }
774
775         /// <summary>
776         /// The number of rows this child occupies, if not set, the default value is 1.
777         /// </summary>
778         /// <remarks>
779         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
780         /// </remarks>
781         /// <since_tizen> 3 </since_tizen>
782         public float RowSpan
783         {
784             get
785             {
786                 return (float)GetValue(RowSpanProperty);
787             }
788             set
789             {
790                 SetValue(RowSpanProperty, value);
791                 NotifyPropertyChanged();
792             }
793         }
794
795         /// <summary>
796         /// The number of columns this child occupies, if not set, the default value is 1.
797         /// </summary>
798         /// <remarks>
799         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
800         /// </remarks>
801         /// <since_tizen> 3 </since_tizen>
802         public float ColumnSpan
803         {
804             get
805             {
806                 return (float)GetValue(ColumnSpanProperty);
807             }
808             set
809             {
810                 SetValue(ColumnSpanProperty, value);
811                 NotifyPropertyChanged();
812             }
813         }
814
815         /// <summary>
816         /// The horizontal alignment of this child inside the cells, if not set, the default value is 'left'.
817         /// </summary>
818         /// <remarks>
819         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
820         /// </remarks>
821         /// <since_tizen> 3 </since_tizen>
822         public Tizen.NUI.HorizontalAlignmentType CellHorizontalAlignment
823         {
824             get
825             {
826                 return (HorizontalAlignmentType)GetValue(CellHorizontalAlignmentProperty);
827             }
828             set
829             {
830                 SetValue(CellHorizontalAlignmentProperty, value);
831                 NotifyPropertyChanged();
832             }
833         }
834
835         /// <summary>
836         /// The vertical alignment of this child inside the cells, if not set, the default value is 'top'.
837         /// </summary>
838         /// <remarks>
839         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
840         /// </remarks>
841         /// <since_tizen> 3 </since_tizen>
842         public Tizen.NUI.VerticalAlignmentType CellVerticalAlignment
843         {
844             get
845             {
846                 return (VerticalAlignmentType)GetValue(CellVerticalAlignmentProperty);
847             }
848             set
849             {
850                 SetValue(CellVerticalAlignmentProperty, value);
851                 NotifyPropertyChanged();
852             }
853         }
854
855         /// <summary>
856         /// The left focusable view.<br />
857         /// This will return null if not set.<br />
858         /// This will also return null if the specified left focusable view is not on a window.<br />
859         /// </summary>
860         /// <since_tizen> 3 </since_tizen>
861         public View LeftFocusableView
862         {
863             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
864             get
865             {
866                 return (View)GetValue(LeftFocusableViewProperty);
867             }
868             set
869             {
870                 SetValue(LeftFocusableViewProperty, value);
871                 NotifyPropertyChanged();
872             }
873         }
874
875         /// <summary>
876         /// The right focusable view.<br />
877         /// This will return null if not set.<br />
878         /// This will also return null if the specified right focusable view is not on a window.<br />
879         /// </summary>
880         /// <since_tizen> 3 </since_tizen>
881         public View RightFocusableView
882         {
883             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
884             get
885             {
886                 return (View)GetValue(RightFocusableViewProperty);
887             }
888             set
889             {
890                 SetValue(RightFocusableViewProperty, value);
891                 NotifyPropertyChanged();
892             }
893         }
894
895         /// <summary>
896         /// The up focusable view.<br />
897         /// This will return null if not set.<br />
898         /// This will also return null if the specified up focusable view is not on a window.<br />
899         /// </summary>
900         /// <since_tizen> 3 </since_tizen>
901         public View UpFocusableView
902         {
903             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
904             get
905             {
906                 return (View)GetValue(UpFocusableViewProperty);
907             }
908             set
909             {
910                 SetValue(UpFocusableViewProperty, value);
911                 NotifyPropertyChanged();
912             }
913         }
914
915         /// <summary>
916         /// The down focusable view.<br />
917         /// This will return null if not set.<br />
918         /// This will also return null if the specified down focusable view is not on a window.<br />
919         /// </summary>
920         /// <since_tizen> 3 </since_tizen>
921         public View DownFocusableView
922         {
923             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
924             get
925             {
926                 return (View)GetValue(DownFocusableViewProperty);
927             }
928             set
929             {
930                 SetValue(DownFocusableViewProperty, value);
931                 NotifyPropertyChanged();
932             }
933         }
934
935         /// <summary>
936         /// Whether the view should be focusable by keyboard navigation.
937         /// </summary>
938         /// <since_tizen> 3 </since_tizen>
939         public bool Focusable
940         {
941             set
942             {
943                 SetValue(FocusableProperty, value);
944                 NotifyPropertyChanged();
945             }
946             get
947             {
948                 return (bool)GetValue(FocusableProperty);
949             }
950         }
951
952         /// <summary>
953         /// Whether the children of this view can be focusable by keyboard navigation. If user sets this to false, the children of this actor view will not be focused.
954         /// Note : Default value is true.
955         /// </summary>
956         [EditorBrowsable(EditorBrowsableState.Never)]
957         public bool FocusableChildren
958         {
959             set
960             {
961                 SetValue(FocusableChildrenProperty, value);
962                 NotifyPropertyChanged();
963             }
964             get
965             {
966                 return (bool)GetValue(FocusableChildrenProperty);
967             }
968         }
969
970         /// <summary>
971         /// Whether this view can focus by touch.
972         /// If Focusable is false, FocusableInTouch is disabled.
973         /// If you want to have focus on touch, you need to set both Focusable and FocusableInTouch settings to true.
974         /// </summary>
975         [EditorBrowsable(EditorBrowsableState.Never)]
976         public bool FocusableInTouch
977         {
978             set
979             {
980                 SetValue(FocusableInTouchProperty, value);
981                 NotifyPropertyChanged();
982             }
983             get
984             {
985                 return (bool)GetValue(FocusableInTouchProperty);
986             }
987         }
988
989         /// <summary>
990         ///  Retrieves the position of the view.<br />
991         ///  The coordinates are relative to the view's parent.<br />
992         /// </summary>
993         /// <since_tizen> 3 </since_tizen>
994         public Position CurrentPosition
995         {
996             get
997             {
998                 return GetCurrentPosition();
999             }
1000         }
1001
1002         /// <summary>
1003         /// Sets the size of a view for the width and the height.<br />
1004         /// Geometry can be scaled to fit within this area.<br />
1005         /// This does not interfere with the view's scale factor.<br />
1006         /// The views default depth is the minimum of width and height.<br />
1007         /// </summary>
1008         /// <remarks>
1009         /// This NUI object (Size2D) typed property can be configured by multiple cascade setting. <br />
1010         /// For example, this code ( view.Size2D.Width = 100; view.Size2D.Height = 100; ) is equivalent to this ( view.Size2D = new Size2D(100, 100); ). <br />
1011         /// </remarks>
1012         /// <since_tizen> 3 </since_tizen>
1013         public Size2D Size2D
1014         {
1015             get
1016             {
1017                 Size2D temp = (Size2D)GetValue(Size2DProperty);
1018                 int width = temp.Width;
1019                 int height = temp.Height;
1020
1021                 if (this.Layout == null)
1022                 {
1023                     if (width < 0) { width = 0; }
1024                     if (height < 0) { height = 0; }
1025                 }
1026
1027                 return new Size2D(OnSize2DChanged, width, height);
1028             }
1029             set
1030             {
1031                 SetValue(Size2DProperty, value);
1032
1033                 NotifyPropertyChanged();
1034             }
1035         }
1036
1037         /// <summary>
1038         ///  Retrieves the size of the view.<br />
1039         ///  The coordinates are relative to the view's parent.<br />
1040         /// </summary>
1041         /// <since_tizen> 3 </since_tizen>
1042         public Size2D CurrentSize
1043         {
1044             get
1045             {
1046                 return GetCurrentSize();
1047             }
1048         }
1049
1050         /// <summary>
1051         /// Retrieves and sets the view's opacity.<br />
1052         /// </summary>
1053         /// <remarks>
1054         /// <para>
1055         /// Animatable - This property can be animated using <c>Animation</c> class.
1056         /// <code>
1057         /// animation.AnimateTo(view, "Opacity", 0.5f);
1058         /// </code>
1059         /// </para>
1060         /// </remarks>
1061         /// <since_tizen> 3 </since_tizen>
1062         public float Opacity
1063         {
1064             get
1065             {
1066                 return (float)GetValue(OpacityProperty);
1067             }
1068             set
1069             {
1070                 SetValue(OpacityProperty, value);
1071                 NotifyPropertyChanged();
1072             }
1073         }
1074
1075         /// <summary>
1076         /// Sets the position of the view for X and Y.<br />
1077         /// By default, sets the position vector between the parent origin and the pivot point (default).<br />
1078         /// If the position inheritance is disabled, sets the world position.<br />
1079         /// </summary>
1080         /// <remarks>
1081         /// This NUI object (Position2D) typed property can be configured by multiple cascade setting. <br />
1082         /// For example, this code ( view.Position2D.X = 100; view.Position2D.Y = 100; ) is equivalent to this ( view.Position2D = new Position2D(100, 100); ). <br />
1083         /// </remarks>
1084         /// <since_tizen> 3 </since_tizen>
1085         public Position2D Position2D
1086         {
1087             get
1088             {
1089                 Position2D temp = (Position2D)GetValue(Position2DProperty);
1090                 return new Position2D(OnPosition2DChanged, temp.X, temp.Y);
1091             }
1092             set
1093             {
1094                 SetValue(Position2DProperty, value);
1095                 NotifyPropertyChanged();
1096             }
1097         }
1098
1099         /// <summary>
1100         /// Retrieves the screen position of the view.<br />
1101         /// </summary>
1102         /// <since_tizen> 3 </since_tizen>
1103         public Vector2 ScreenPosition
1104         {
1105             get
1106             {
1107                 Vector2 temp = new Vector2(0.0f, 0.0f);
1108                 var pValue = GetProperty(View.Property.ScreenPosition);
1109                 pValue.Get(temp);
1110                 pValue.Dispose();
1111                 return temp;
1112             }
1113         }
1114
1115         /// <summary>
1116         /// Determines whether the pivot point should be used to determine the position of the view.
1117         /// This is false by default.
1118         /// </summary>
1119         /// <remarks>If false, then the top-left of the view is used for the position.
1120         /// Setting this to false will allow scaling or rotation around the pivot point without affecting the view's position.
1121         /// </remarks>
1122         /// <since_tizen> 3 </since_tizen>
1123         public bool PositionUsesPivotPoint
1124         {
1125             get
1126             {
1127                 return (bool)GetValue(PositionUsesPivotPointProperty);
1128             }
1129             set
1130             {
1131                 SetValue(PositionUsesPivotPointProperty, value);
1132                 NotifyPropertyChanged();
1133             }
1134         }
1135
1136         /// <summary>
1137         /// Deprecated in API5; Will be removed in API8. Please use PositionUsesPivotPoint instead!
1138         /// </summary>
1139         /// <since_tizen> 3 </since_tizen>
1140         [Obsolete("Deprecated in API5; Will be removed in API8. Please use PositionUsesPivotPoint instead! " +
1141             "Like: " +
1142             "View view = new View(); " +
1143             "view.PivotPoint = PivotPoint.Center; " +
1144             "view.PositionUsesPivotPoint = true;" +
1145             " Deprecated in API5: Will be removed in API8")]
1146         [EditorBrowsable(EditorBrowsableState.Never)]
1147         public bool PositionUsesAnchorPoint
1148         {
1149             get
1150             {
1151                 return (bool)GetValue(PositionUsesAnchorPointProperty);
1152             }
1153             set
1154             {
1155                 SetValue(PositionUsesAnchorPointProperty, value);
1156             }
1157         }
1158
1159         private bool InternalPositionUsesAnchorPoint
1160         {
1161             get
1162             {
1163                 bool temp = false;
1164                 var pValue = GetProperty(View.Property.PositionUsesAnchorPoint);
1165                 pValue.Get(out temp);
1166                 pValue.Dispose();
1167                 return temp;
1168             }
1169             set
1170             {
1171                 var temp = new Tizen.NUI.PropertyValue(value);
1172                 SetProperty(View.Property.PositionUsesAnchorPoint, temp);
1173                 temp.Dispose();
1174                 NotifyPropertyChanged();
1175             }
1176         }
1177
1178         /// <summary>
1179         /// Queries whether the view is connected to the stage.<br />
1180         /// When a view is connected, it will be directly or indirectly parented to the root view.<br />
1181         /// </summary>
1182         /// <since_tizen> 3 </since_tizen>
1183         public bool IsOnWindow
1184         {
1185             get
1186             {
1187                 return OnWindow();
1188             }
1189         }
1190
1191         /// <summary>
1192         /// Gets the depth in the hierarchy for the view.
1193         /// </summary>
1194         /// <since_tizen> 3 </since_tizen>
1195         public int HierarchyDepth
1196         {
1197             get
1198             {
1199                 return GetHierarchyDepth();
1200             }
1201         }
1202
1203         /// <summary>
1204         /// Sets the sibling order of the view so the depth position can be defined within the same parent.
1205         /// </summary>
1206         /// <remarks>
1207         /// Note the initial value is 0. SiblingOrder should be bigger than 0 or equal to 0.
1208         /// Raise, Lower, RaiseToTop, LowerToBottom, RaiseAbove, and LowerBelow will override the sibling order.
1209         /// The values set by this property will likely change.
1210         /// </remarks>
1211         /// <since_tizen> 3 </since_tizen>
1212         public int SiblingOrder
1213         {
1214             get
1215             {
1216                 return (int)GetValue(SiblingOrderProperty);
1217             }
1218             set
1219             {
1220                 SetValue(SiblingOrderProperty, value);
1221
1222                 LayoutGroup layout = Layout as LayoutGroup;
1223                 layout?.ChangeLayoutSiblingOrder(value);
1224
1225                 NotifyPropertyChanged();
1226             }
1227         }
1228
1229         /// <summary>
1230         /// Returns the natural size of the view.
1231         /// </summary>
1232         /// <remarks>
1233         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1234         /// </remarks>
1235         /// <since_tizen> 5 </since_tizen>
1236         public Vector3 NaturalSize
1237         {
1238             get
1239             {
1240                 Vector3 ret = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true);
1241                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1242                 return ret;
1243             }
1244         }
1245
1246         /// <summary>
1247         /// Returns the natural size (Size2D) of the view.
1248         /// </summary>
1249         /// <remarks>
1250         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1251         /// </remarks>
1252         /// <since_tizen> 4 </since_tizen>
1253         public Size2D NaturalSize2D
1254         {
1255             get
1256             {
1257                 Vector3 temp = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true);
1258                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1259
1260                 Size2D sz = new Size2D((int)temp.Width, (int)temp.Height);
1261                 temp.Dispose();
1262                 return sz;
1263             }
1264         }
1265
1266         /// <summary>
1267         /// Gets or sets the origin of a view within its parent's area.<br />
1268         /// This is expressed in unit coordinates, such that (0.0, 0.0, 0.5) is the top-left corner of the parent, and (1.0, 1.0, 0.5) is the bottom-right corner.<br />
1269         /// The default parent-origin is ParentOrigin.TopLeft (0.0, 0.0, 0.5).<br />
1270         /// A view's position is the distance between this origin and the view's anchor-point.<br />
1271         /// </summary>
1272         /// <pre>The view has been initialized.</pre>
1273         /// <since_tizen> 3 </since_tizen>
1274         public Position ParentOrigin
1275         {
1276             get
1277             {
1278                 Position tmp = (Position)GetValue(ParentOriginProperty);
1279                 return new Position(OnParentOriginChanged, tmp.X, tmp.Y, tmp.Z);
1280             }
1281             set
1282             {
1283                 SetValue(ParentOriginProperty, value);
1284                 NotifyPropertyChanged();
1285             }
1286         }
1287
1288         /// <summary>
1289         /// Gets or sets the anchor-point of a view.<br />
1290         /// This is expressed in unit coordinates, such that (0.0, 0.0, 0.5) is the top-left corner of the view, and (1.0, 1.0, 0.5) is the bottom-right corner.<br />
1291         /// The default pivot point is PivotPoint.Center (0.5, 0.5, 0.5).<br />
1292         /// A view position is the distance between its parent-origin and this anchor-point.<br />
1293         /// A view's orientation is the rotation from its default orientation, the rotation is centered around its anchor-point.<br />
1294         /// <pre>The view has been initialized.</pre>
1295         /// </summary>
1296         /// <remarks>
1297         /// The property cascade chaining set is possible. For example, this (view.PivotPoint.X = 0.1f;) is possible.
1298         /// </remarks>
1299         /// <since_tizen> 3 </since_tizen>
1300         public Position PivotPoint
1301         {
1302             get
1303             {
1304                 Position tmp = (Position)GetValue(PivotPointProperty);
1305                 return new Position(OnPivotPointChanged, tmp.X, tmp.Y, tmp.Z);
1306             }
1307             set
1308             {
1309                 SetValue(PivotPointProperty, value);
1310                 NotifyPropertyChanged();
1311             }
1312         }
1313
1314         /// <summary>
1315         /// Gets or sets the size width of the view.
1316         /// </summary>
1317         /// <remarks>
1318         /// <para>
1319         /// Animatable - This property can be animated using <c>Animation</c> class.
1320         /// <code>
1321         /// animation.AnimateTo(view, "SizeWidth", 500.0f);
1322         /// </code>
1323         /// </para>
1324         /// </remarks>
1325         /// <since_tizen> 3 </since_tizen>
1326         public float SizeWidth
1327         {
1328             get
1329             {
1330                 return (float)GetValue(SizeWidthProperty);
1331             }
1332             set
1333             {
1334                 SetValue(SizeWidthProperty, value);
1335                 NotifyPropertyChanged();
1336             }
1337         }
1338
1339         /// <summary>
1340         /// Gets or sets the size height of the view.
1341         /// </summary>
1342         /// <remarks>
1343         /// <para>
1344         /// Animatable - This property can be animated using <c>Animation</c> class.
1345         /// </para>
1346         /// <code>
1347         /// animation.AnimateTo(view, "SizeHeight", 500.0f);
1348         /// </code>
1349         /// </remarks>
1350         /// <since_tizen> 3 </since_tizen>
1351         public float SizeHeight
1352         {
1353             get
1354             {
1355                 return (float)GetValue(SizeHeightProperty);
1356             }
1357             set
1358             {
1359                 SetValue(SizeHeightProperty, value);
1360                 NotifyPropertyChanged();
1361             }
1362         }
1363
1364         /// <summary>
1365         /// Gets or sets the position of the view.<br />
1366         /// By default, sets the position vector between the parent origin and pivot point (default).<br />
1367         /// If the position inheritance is disabled, sets the world position.<br />
1368         /// </summary>
1369         /// <remarks>
1370         /// <para>
1371         /// Animatable - This property can be animated using <c>Animation</c> class.
1372         /// <code>
1373         /// animation.AnimateTo(view, "Position", new Position(50, 0));
1374         /// </code>
1375         /// </para>
1376         /// The property cascade chaining set is possible. For example, this (view.Position.X = 1.0f;) is possible.
1377         /// </remarks>
1378         /// <since_tizen> 3 </since_tizen>
1379         public Position Position
1380         {
1381             get
1382             {
1383                 Position tmp = (Position)GetValue(PositionProperty);
1384                 return new Position(OnPositionChanged, tmp.X, tmp.Y, tmp.Z);
1385             }
1386             set
1387             {
1388                 SetValue(PositionProperty, value);
1389                 NotifyPropertyChanged();
1390             }
1391         }
1392
1393         /// <summary>
1394         /// Gets or sets the position X of the view.
1395         /// </summary>
1396         /// <remarks>
1397         /// <para>
1398         /// Animatable - This property can be animated using <c>Animation</c> class.
1399         /// <code>
1400         /// animation.AnimateTo(view, "PositionX", 50.0f);
1401         /// </code>
1402         /// </para>
1403         /// </remarks>
1404         /// <since_tizen> 3 </since_tizen>
1405         public float PositionX
1406         {
1407             get
1408             {
1409                 return (float)GetValue(PositionXProperty);
1410             }
1411             set
1412             {
1413                 SetValue(PositionXProperty, value);
1414                 NotifyPropertyChanged();
1415             }
1416         }
1417
1418         /// <summary>
1419         /// Gets or sets the position Y of the view.
1420         /// </summary>
1421         /// <remarks>
1422         /// <para>
1423         /// Animatable - This property can be animated using <c>Animation</c> class.
1424         /// <code>
1425         /// animation.AnimateTo(view, "PositionY", 50.0f);
1426         /// </code>
1427         /// </para>
1428         /// </remarks>
1429         /// <since_tizen> 3 </since_tizen>
1430         public float PositionY
1431         {
1432             get
1433             {
1434                 return (float)GetValue(PositionYProperty);
1435             }
1436             set
1437             {
1438                 SetValue(PositionYProperty, value);
1439                 NotifyPropertyChanged();
1440             }
1441         }
1442
1443         /// <summary>
1444         /// Gets or sets the position Z of the view.
1445         /// </summary>
1446         /// <remarks>
1447         /// <para>
1448         /// Animatable - This property can be animated using <c>Animation</c> class.
1449         /// <code>
1450         /// animation.AnimateTo(view, "PositionZ", 50.0f);
1451         /// </code>
1452         /// </para>
1453         /// </remarks>
1454         /// <since_tizen> 3 </since_tizen>
1455         public float PositionZ
1456         {
1457             get
1458             {
1459                 return (float)GetValue(PositionZProperty);
1460             }
1461             set
1462             {
1463                 SetValue(PositionZProperty, value);
1464                 NotifyPropertyChanged();
1465             }
1466         }
1467
1468         /// <summary>
1469         /// Gets or sets the world position of the view.
1470         /// </summary>
1471         /// <since_tizen> 3 </since_tizen>
1472         public Vector3 WorldPosition
1473         {
1474             get
1475             {
1476                 Vector3 temp = new Vector3(0.0f, 0.0f, 0.0f);
1477                 var pValue = GetProperty(View.Property.WorldPosition);
1478                 pValue.Get(temp);
1479                 pValue.Dispose();
1480                 return temp;
1481             }
1482         }
1483
1484         /// <summary>
1485         /// Gets or sets the orientation of the view.<br />
1486         /// The view's orientation is the rotation from its default orientation, and the rotation is centered around its anchor-point.<br />
1487         /// </summary>
1488         /// <remarks>
1489         /// <para>
1490         /// This is an asynchronous method.
1491         /// </para>
1492         /// <para>
1493         /// Animatable - This property can be animated using <c>Animation</c> class.
1494         /// <code>
1495         /// animation.AnimateTo(view, "Orientation", new Rotation(new Radian((float)Math.PI), Vector3.XAxis));
1496         /// </code>
1497         /// </para>
1498         /// </remarks>
1499         /// <since_tizen> 3 </since_tizen>
1500         public Rotation Orientation
1501         {
1502             get
1503             {
1504                 return (Rotation)GetValue(OrientationProperty);
1505             }
1506             set
1507             {
1508                 SetValue(OrientationProperty, value);
1509                 NotifyPropertyChanged();
1510             }
1511         }
1512
1513         /// <summary>
1514         /// Gets or sets the world orientation of the view.<br />
1515         /// </summary>
1516         /// <since_tizen> 3 </since_tizen>
1517         public Rotation WorldOrientation
1518         {
1519             get
1520             {
1521                 Rotation temp = new Rotation();
1522                 var pValue = GetProperty(View.Property.WorldOrientation);
1523                 pValue.Get(temp);
1524                 pValue.Dispose();
1525                 return temp;
1526             }
1527         }
1528
1529         /// <summary>
1530         /// Gets or sets the scale factor applied to the view.<br />
1531         /// </summary>
1532         /// <remarks>
1533         /// <para>
1534         /// Animatable - This property can be animated using <c>Animation</c> class.
1535         /// <code>
1536         /// animation.AnimateTo(view, "Scale", new Vector3(1.5f, 1.5f, 1.0f));
1537         /// </code>
1538         /// </para>
1539         /// The property cascade chaining set is possible. For example, this (view.Scale.X = 0.1f;) is possible.
1540         /// </remarks>
1541         /// <since_tizen> 3 </since_tizen>
1542         public Vector3 Scale
1543         {
1544             get
1545             {
1546                 Vector3 temp = (Vector3)GetValue(ScaleProperty);
1547                 return new Vector3(OnScaleChanged, temp.X, temp.Y, temp.Z);
1548             }
1549             set
1550             {
1551                 SetValue(ScaleProperty, value);
1552                 NotifyPropertyChanged();
1553             }
1554         }
1555
1556         /// <summary>
1557         /// Gets or sets the scale X factor applied to the view.
1558         /// </summary>
1559         /// <remarks>
1560         /// <para>
1561         /// Animatable - This property can be animated using <c>Animation</c> class.
1562         /// <code>
1563         /// animation.AnimateTo(view, "ScaleX", 1.5f);
1564         /// </code>
1565         /// </para>
1566         /// </remarks>
1567         /// <since_tizen> 3 </since_tizen>
1568         public float ScaleX
1569         {
1570             get
1571             {
1572                 return (float)GetValue(ScaleXProperty);
1573             }
1574             set
1575             {
1576                 SetValue(ScaleXProperty, value);
1577                 NotifyPropertyChanged();
1578             }
1579         }
1580
1581         /// <summary>
1582         /// Gets or sets the scale Y factor applied to the view.
1583         /// </summary>
1584         /// <remarks>
1585         /// <para>
1586         /// Animatable - This property can be animated using <c>Animation</c> class.
1587         /// <code>
1588         /// animation.AnimateTo(view, "ScaleY", 1.5f);
1589         /// </code>
1590         /// </para>
1591         /// </remarks>
1592         /// <since_tizen> 3 </since_tizen>
1593         public float ScaleY
1594         {
1595             get
1596             {
1597                 return (float)GetValue(ScaleYProperty);
1598             }
1599             set
1600             {
1601                 SetValue(ScaleYProperty, value);
1602                 NotifyPropertyChanged();
1603             }
1604         }
1605
1606         /// <summary>
1607         /// Gets or sets the scale Z factor applied to the view.
1608         /// </summary>
1609         /// <remarks>
1610         /// <para>
1611         /// Animatable - This property can be animated using <c>Animation</c> class.
1612         /// <code>
1613         /// animation.AnimateTo(view, "ScaleZ", 1.5f);
1614         /// </code>
1615         /// </para>
1616         /// </remarks>
1617         /// <since_tizen> 3 </since_tizen>
1618         public float ScaleZ
1619         {
1620             get
1621             {
1622                 return (float)GetValue(ScaleZProperty);
1623             }
1624             set
1625             {
1626                 SetValue(ScaleZProperty, value);
1627                 NotifyPropertyChanged();
1628             }
1629         }
1630
1631         /// <summary>
1632         /// Gets the world scale of the view.
1633         /// </summary>
1634         /// <since_tizen> 3 </since_tizen>
1635         public Vector3 WorldScale
1636         {
1637             get
1638             {
1639                 Vector3 temp = new Vector3(0.0f, 0.0f, 0.0f);
1640                 var pValue = GetProperty(View.Property.WorldScale);
1641                 pValue.Get(temp);
1642                 pValue.Dispose();
1643                 return temp;
1644             }
1645         }
1646
1647         /// <summary>
1648         /// Retrieves the visibility flag of the view.
1649         /// </summary>
1650         /// <remarks>
1651         /// <para>
1652         /// If the view is not visible, then the view and its children will not be rendered.
1653         /// This is regardless of the individual visibility values of the children, i.e., the view will only be rendered if all of its parents have visibility set to true.
1654         /// </para>
1655         /// <para>
1656         /// Animatable - This property can be animated using <c>Animation</c> class.
1657         /// <code>
1658         /// animation.AnimateTo(view, "Visibility", false);
1659         /// </code>
1660         /// </para>
1661         /// </remarks>
1662         /// <since_tizen> 3 </since_tizen>
1663         public bool Visibility
1664         {
1665             get
1666             {
1667                 bool temp = false;
1668                 var pValue = GetProperty(View.Property.VISIBLE);
1669                 pValue.Get(out temp);
1670                 pValue.Dispose();
1671                 return temp;
1672             }
1673         }
1674
1675         /// <summary>
1676         /// Gets the view's world color.
1677         /// </summary>
1678         /// <since_tizen> 3 </since_tizen>
1679         public Vector4 WorldColor
1680         {
1681             get
1682             {
1683                 Vector4 temp = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
1684                 var pValue = GetProperty(View.Property.WorldColor);
1685                 pValue.Get(temp);
1686                 pValue.Dispose();
1687                 return temp;
1688             }
1689         }
1690
1691         /// <summary>
1692         /// Gets or sets the view's name.
1693         /// </summary>
1694         /// <since_tizen> 3 </since_tizen>
1695         public string Name
1696         {
1697             get
1698             {
1699                 return (string)GetValue(NameProperty);
1700             }
1701             set
1702             {
1703                 SetValue(NameProperty, value);
1704                 NotifyPropertyChanged();
1705             }
1706         }
1707
1708         /// <summary>
1709         /// Get the number of children held by the view.
1710         /// </summary>
1711         /// <since_tizen> 3 </since_tizen>
1712         public new uint ChildCount
1713         {
1714             get
1715             {
1716                 return Convert.ToUInt32(Children.Count);
1717             }
1718         }
1719
1720         /// <summary>
1721         /// Gets the view's ID.
1722         /// Read-only
1723         /// </summary>
1724         /// <since_tizen> 3 </since_tizen>
1725         public uint ID
1726         {
1727             get
1728             {
1729                 return GetId();
1730             }
1731         }
1732
1733         /// <summary>
1734         /// Gets or sets the status of whether the view should emit touch or hover signals.
1735         /// If a View is made insensitive, then the View and its children are not hittable.
1736         /// </summary>
1737         /// <since_tizen> 3 </since_tizen>
1738         public bool Sensitive
1739         {
1740             get
1741             {
1742                 return (bool)GetValue(SensitiveProperty);
1743             }
1744             set
1745             {
1746                 SetValue(SensitiveProperty, value);
1747                 NotifyPropertyChanged();
1748             }
1749         }
1750
1751         /// <summary>
1752         /// Gets or sets the status of whether the view should receive a notification when touch or hover motion events leave the boundary of the view.
1753         /// </summary>
1754         /// <since_tizen> 3 </since_tizen>
1755         public bool LeaveRequired
1756         {
1757             get
1758             {
1759                 return (bool)GetValue(LeaveRequiredProperty);
1760             }
1761             set
1762             {
1763                 SetValue(LeaveRequiredProperty, value);
1764                 NotifyPropertyChanged();
1765             }
1766         }
1767
1768         /// <summary>
1769         /// Gets or sets the status of whether a child view inherits it's parent's orientation.
1770         /// </summary>
1771         /// <since_tizen> 3 </since_tizen>
1772         public bool InheritOrientation
1773         {
1774             get
1775             {
1776                 return (bool)GetValue(InheritOrientationProperty);
1777             }
1778             set
1779             {
1780                 SetValue(InheritOrientationProperty, value);
1781                 NotifyPropertyChanged();
1782             }
1783         }
1784
1785         /// <summary>
1786         /// Gets or sets the status of whether a child view inherits it's parent's scale.
1787         /// </summary>
1788         /// <since_tizen> 3 </since_tizen>
1789         public bool InheritScale
1790         {
1791             get
1792             {
1793                 return (bool)GetValue(InheritScaleProperty);
1794             }
1795             set
1796             {
1797                 SetValue(InheritScaleProperty, value);
1798                 NotifyPropertyChanged();
1799             }
1800         }
1801
1802         /// <summary>
1803         /// Gets or sets the status of how the view and its children should be drawn.<br />
1804         /// Not all views are renderable, but DrawMode can be inherited from any view.<br />
1805         /// If an object is in a 3D layer, it will be depth-tested against other objects in the world, i.e., it may be obscured if other objects are in front.<br />
1806         /// If DrawMode.Overlay2D is used, the view and its children will be drawn as a 2D overlay.<br />
1807         /// Overlay views are drawn in a separate pass, after all non-overlay views within the layer.<br />
1808         /// For overlay views, the drawing order is with respect to tree levels of views, and depth-testing will not be used.<br />
1809         /// </summary>
1810         /// <since_tizen> 3 </since_tizen>
1811         public DrawModeType DrawMode
1812         {
1813             get
1814             {
1815                 return (DrawModeType)GetValue(DrawModeProperty);
1816             }
1817             set
1818             {
1819                 SetValue(DrawModeProperty, value);
1820                 NotifyPropertyChanged();
1821             }
1822         }
1823
1824         /// <summary>
1825         /// Gets or sets the relative to parent size factor of the view.<br />
1826         /// This factor is only used when ResizePolicyType is set to either: ResizePolicyType.SizeRelativeToParent or ResizePolicyType.SizeFixedOffsetFromParent.<br />
1827         /// This view's size is set to the view's size multiplied by or added to this factor, depending on ResizePolicyType.<br />
1828         /// </summary>
1829         /// <remarks>
1830         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
1831         /// </remarks>
1832         /// <since_tizen> 3 </since_tizen>
1833         public Vector3 SizeModeFactor
1834         {
1835             get
1836             {
1837                 Vector3 temp = (Vector3)GetValue(SizeModeFactorProperty);
1838                 return new Vector3(OnSizeModeFactorChanged, temp.X, temp.Y, temp.Z);
1839             }
1840             set
1841             {
1842                 SetValue(SizeModeFactorProperty, value);
1843                 NotifyPropertyChanged();
1844             }
1845         }
1846
1847         /// <summary>
1848         /// Gets or sets the width resize policy to be used.
1849         /// </summary>
1850         /// <since_tizen> 3 </since_tizen>
1851         public ResizePolicyType WidthResizePolicy
1852         {
1853             get
1854             {
1855                 return (ResizePolicyType)GetValue(WidthResizePolicyProperty);
1856             }
1857             set
1858             {
1859                 SetValue(WidthResizePolicyProperty, value);
1860                 NotifyPropertyChanged();
1861             }
1862         }
1863
1864         /// <summary>
1865         /// Gets or sets the height resize policy to be used.
1866         /// </summary>
1867         /// <since_tizen> 3 </since_tizen>
1868         public ResizePolicyType HeightResizePolicy
1869         {
1870             get
1871             {
1872                 return (ResizePolicyType)GetValue(HeightResizePolicyProperty);
1873             }
1874             set
1875             {
1876                 SetValue(HeightResizePolicyProperty, value);
1877                 NotifyPropertyChanged();
1878             }
1879         }
1880
1881         /// <summary>
1882         /// Gets or sets the policy to use when setting size with size negotiation.<br />
1883         /// Defaults to SizeScalePolicyType.UseSizeSet.<br />
1884         /// </summary>
1885         /// <since_tizen> 3 </since_tizen>
1886         public SizeScalePolicyType SizeScalePolicy
1887         {
1888             get
1889             {
1890                 return (SizeScalePolicyType)GetValue(SizeScalePolicyProperty);
1891             }
1892             set
1893             {
1894                 SetValue(SizeScalePolicyProperty, value);
1895                 NotifyPropertyChanged();
1896             }
1897         }
1898
1899         /// <summary>
1900         ///  Gets or sets the status of whether the width size is dependent on the height size.
1901         /// </summary>
1902         /// <since_tizen> 3 </since_tizen>
1903         public bool WidthForHeight
1904         {
1905             get
1906             {
1907                 return (bool)GetValue(WidthForHeightProperty);
1908             }
1909             set
1910             {
1911                 SetValue(WidthForHeightProperty, value);
1912                 NotifyPropertyChanged();
1913             }
1914         }
1915
1916         /// <summary>
1917         /// Gets or sets the status of whether the height size is dependent on the width size.
1918         /// </summary>
1919         /// <since_tizen> 3 </since_tizen>
1920         public bool HeightForWidth
1921         {
1922             get
1923             {
1924                 return (bool)GetValue(HeightForWidthProperty);
1925             }
1926             set
1927             {
1928                 SetValue(HeightForWidthProperty, value);
1929                 NotifyPropertyChanged();
1930             }
1931         }
1932
1933         /// <summary>
1934         /// Gets or sets the padding for use in layout.
1935         /// </summary>
1936         /// <remarks>
1937         /// The property cascade chaining set is possible. For example, this (view.Padding.X = 0.1f;) is possible.
1938         /// </remarks>
1939         /// <since_tizen> 5 </since_tizen>
1940         public Extents Padding
1941         {
1942             get
1943             {
1944                 // If View has a Layout then padding in stored in the base Layout class
1945                 if (Layout != null)
1946                 {
1947                     return Layout.Padding;
1948                 }
1949                 else
1950                 {
1951                     Extents temp = (Extents)GetValue(PaddingProperty);
1952                     return new Extents(OnPaddingChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
1953                 }
1954                 // Two return points to prevent creating a zeroed Extent native object before assignment
1955             }
1956             set
1957             {
1958                 Extents padding = value;
1959                 if (Layout != null)
1960                 {
1961                     // Layout set so store Padding in LayoutItem instead of in View.
1962                     // If View stores the Padding value then Legacy Size Negotiation will overwrite
1963                     // the position and sizes measure in the Layouting.
1964                     Layout.Padding = value;
1965                     // If Layout is a LayoutItem then it could be a View that handles it's own padding.
1966                     // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
1967                     if (typeof(LayoutGroup).IsAssignableFrom(Layout.GetType())) // If a Layout container of some kind.
1968                     {
1969                         padding = new Extents(0, 0, 0, 0); // Reset value stored in View.
1970                     }
1971                 }
1972
1973                 SetValue(PaddingProperty, padding);
1974                 NotifyPropertyChanged();
1975             }
1976         }
1977
1978         /// <summary>
1979         /// Gets or sets the minimum size the view can be assigned in size negotiation.
1980         /// </summary>
1981         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
1982         /// <remarks>
1983         /// The property cascade chaining set is possible. For example, this (view.MinimumSize.Width = 1;) is possible.
1984         /// </remarks>
1985         /// <since_tizen> 3 </since_tizen>
1986         public Size2D MinimumSize
1987         {
1988             get
1989             {
1990                 Size2D tmp = (Size2D)GetValue(MinimumSizeProperty);
1991                 return new Size2D(OnMinimumSizeChanged, tmp.Width, tmp.Height);
1992             }
1993             set
1994             {
1995                 if (value == null)
1996                 {
1997                     throw new ArgumentNullException(nameof(value));
1998                 }
1999                 if (layout != null)
2000                 {
2001                     // Note: it only works if minimum size is >= than natural size.
2002                     // To force the size it should be done through the width&height spec or Size2D.
2003                     layout.MinimumWidth = new Tizen.NUI.LayoutLength(value.Width);
2004                     layout.MinimumHeight = new Tizen.NUI.LayoutLength(value.Height);
2005                     layout.RequestLayout();
2006                 }
2007                 SetValue(MinimumSizeProperty, value);
2008                 NotifyPropertyChanged();
2009             }
2010         }
2011
2012         /// <summary>
2013         /// Gets or sets the maximum size the view can be assigned in size negotiation.
2014         /// </summary>
2015         /// <remarks>
2016         /// The property cascade chaining set is possible. For example, this (view.MaximumSize.Width = 1;) is possible.
2017         /// </remarks>
2018         /// <since_tizen> 3 </since_tizen>
2019         public Size2D MaximumSize
2020         {
2021             get
2022             {
2023                 Size2D tmp = (Size2D)GetValue(MaximumSizeProperty);
2024                 return new Size2D(OnMaximumSizeChanged, tmp.Width, tmp.Height);
2025             }
2026             set
2027             {
2028                 // We don't have Layout.Maximum(Width|Height) so we cannot apply it to layout.
2029                 // MATCH_PARENT spec + parent container size can be used to limit
2030                 if (layout != null)
2031                 {
2032                     layout.RequestLayout();
2033                 }
2034                 SetValue(MaximumSizeProperty, value);
2035                 NotifyPropertyChanged();
2036             }
2037         }
2038
2039         /// <summary>
2040         /// Gets or sets whether a child view inherits it's parent's position.<br />
2041         /// Default is to inherit.<br />
2042         /// Switching this off means that using position sets the view's world position, i.e., translates from the world origin (0,0,0) to the pivot point of the view.<br />
2043         /// </summary>
2044         /// <since_tizen> 3 </since_tizen>
2045         public bool InheritPosition
2046         {
2047             get
2048             {
2049                 return (bool)GetValue(InheritPositionProperty);
2050             }
2051             set
2052             {
2053                 SetValue(InheritPositionProperty, value);
2054                 NotifyPropertyChanged();
2055             }
2056         }
2057
2058         /// <summary>
2059         /// Gets or sets the clipping behavior (mode) of it's children.
2060         /// </summary>
2061         /// <since_tizen> 3 </since_tizen>
2062         public ClippingModeType ClippingMode
2063         {
2064             get
2065             {
2066                 return (ClippingModeType)GetValue(ClippingModeProperty);
2067             }
2068             set
2069             {
2070                 SetValue(ClippingModeProperty, value);
2071                 NotifyPropertyChanged();
2072             }
2073         }
2074
2075         /// <summary>
2076         /// Gets the number of renderers held by the view.
2077         /// </summary>
2078         /// <since_tizen> 3 </since_tizen>
2079         public uint RendererCount
2080         {
2081             get
2082             {
2083                 return GetRendererCount();
2084             }
2085         }
2086
2087         /// <summary>
2088         /// Deprecated in API5; Will be removed in API8. Please use PivotPoint instead!
2089         /// </summary>
2090         /// <remarks>
2091         /// The property cascade chaining set is possible. For example, this (view.AnchorPoint.X = 0.1f;) is possible.
2092         /// </remarks>
2093         /// <since_tizen> 3 </since_tizen>
2094         [Obsolete("Deprecated in API5; Will be removed in API8. Please use PivotPoint instead! " +
2095             "Like: " +
2096             "View view = new View(); " +
2097             "view.PivotPoint = PivotPoint.Center; " +
2098             "view.PositionUsesPivotPoint = true;")]
2099         [EditorBrowsable(EditorBrowsableState.Never)]
2100         public Position AnchorPoint
2101         {
2102             get
2103             {
2104                 return GetValue(AnchorPointProperty) as Position;
2105             }
2106             set
2107             {
2108                 SetValue(AnchorPointProperty, value);
2109             }
2110         }
2111
2112         private Position InternalAnchorPoint
2113         {
2114             get
2115             {
2116                 Position temp = new Position(0.0f, 0.0f, 0.0f);
2117                 var pValue = GetProperty(View.Property.AnchorPoint);
2118                 pValue.Get(temp);
2119                 pValue.Dispose();
2120                 Position ret = new Position(OnAnchorPointChanged, temp.X, temp.Y, temp.Z);
2121                 temp.Dispose();
2122                 return ret;
2123             }
2124             set
2125             {
2126                 var temp = new Tizen.NUI.PropertyValue(value);
2127                 SetProperty(View.Property.AnchorPoint, temp);
2128                 temp.Dispose();
2129                 NotifyPropertyChanged();
2130             }
2131         }
2132
2133         /// <summary>
2134         /// Sets the size of a view for the width, the height and the depth.<br />
2135         /// Geometry can be scaled to fit within this area.<br />
2136         /// This does not interfere with the view's scale factor.<br />
2137         /// The views default depth is the minimum of width and height.<br />
2138         /// </summary>
2139         /// <remarks>
2140         /// <para>
2141         /// Animatable - This property can be animated using <c>Animation</c> class.
2142         /// <code>
2143         /// animation.AnimateTo(view, "Size", new Size(100, 100));
2144         /// </code>
2145         /// </para>
2146         /// The property cascade chaining set is possible. For example, this (view.Size.Width = 1.0f;) is possible.
2147         /// </remarks>
2148         /// <since_tizen> 5 </since_tizen>
2149         public Size Size
2150         {
2151             get
2152             {
2153                 Size tmp = (Size)GetValue(SizeProperty);
2154                 return new Size(OnSizeChanged, tmp.Width, tmp.Height, tmp.Depth);
2155             }
2156             set
2157             {
2158                 SetValue(SizeProperty, value);
2159                 NotifyPropertyChanged();
2160             }
2161         }
2162
2163         /// <summary>
2164         /// Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead!
2165         /// </summary>
2166         /// <since_tizen> 3 </since_tizen>
2167         [Obsolete("Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead! " +
2168             "Like: " +
2169             "Container parent =  view.GetParent(); " +
2170             "View view = parent as View;")]
2171         [EditorBrowsable(EditorBrowsableState.Never)]
2172         public new View Parent
2173         {
2174             get
2175             {
2176                 View ret;
2177                 IntPtr cPtr = Interop.Actor.GetParent(SwigCPtr);
2178                 HandleRef CPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
2179                 BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(CPtr.Handle);
2180
2181                 if (basehandle is Layer layer)
2182                 {
2183                     ret = new View(Layer.getCPtr(layer).Handle, false);
2184                     NUILog.Error("This Parent property is deprecated, should do not be used");
2185                 }
2186                 else
2187                 {
2188                     ret = basehandle as View;
2189                 }
2190
2191                 Interop.BaseHandle.DeleteBaseHandle(CPtr);
2192                 CPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
2193
2194                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
2195                 return ret;
2196             }
2197         }
2198
2199         /// <summary>
2200         /// Gets/Sets whether inherit parent's the layout Direction.
2201         /// </summary>
2202         /// <since_tizen> 4 </since_tizen>
2203         public bool InheritLayoutDirection
2204         {
2205             get
2206             {
2207                 return (bool)GetValue(InheritLayoutDirectionProperty);
2208             }
2209             set
2210             {
2211                 SetValue(InheritLayoutDirectionProperty, value);
2212                 NotifyPropertyChanged();
2213             }
2214         }
2215
2216         /// <summary>
2217         /// Gets/Sets the layout Direction.
2218         /// </summary>
2219         /// <since_tizen> 4 </since_tizen>
2220         public ViewLayoutDirectionType LayoutDirection
2221         {
2222             get
2223             {
2224                 return (ViewLayoutDirectionType)GetValue(LayoutDirectionProperty);
2225             }
2226             set
2227             {
2228                 SetValue(LayoutDirectionProperty, value);
2229                 NotifyPropertyChanged();
2230                 layout?.RequestLayout();
2231             }
2232         }
2233
2234         /// <summary>
2235         /// Gets or sets the Margin for use in layout.
2236         /// </summary>
2237         /// <remarks>
2238         /// Margin property is supported by Layout algorithms and containers.
2239         /// Please Set Layout if you want to use Margin property.
2240         /// The property cascade chaining set is possible. For example, this (view.Margin.X = 0.1f;) is possible.
2241         /// </remarks>
2242         /// <since_tizen> 4 </since_tizen>
2243         public Extents Margin
2244         {
2245             get
2246             {
2247                 // If View has a Layout then margin is stored in Layout.
2248                 if (Layout != null)
2249                 {
2250                     return Layout.Margin;
2251                 }
2252                 else
2253                 {
2254                     // If Layout not set then return margin stored in View.
2255                     Extents temp = (Extents)GetValue(MarginProperty);
2256                     return new Extents(OnMarginChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2257                 }
2258                 // Two return points to prevent creating a zeroed Extent native object before assignment
2259             }
2260             set
2261             {
2262                 if (Layout != null)
2263                 {
2264                     // Layout set so store Margin in LayoutItem instead of View.
2265                     // If View stores the Margin too then the Legacy Size Negotiation will
2266                     // overwrite the position and size values measured in the Layouting.
2267                     Layout.Margin = value;
2268                     SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2269                     layout?.RequestLayout();
2270                 }
2271                 else
2272                 {
2273                     SetValue(MarginProperty, value);
2274                 }
2275                 NotifyPropertyChanged();
2276                 layout?.RequestLayout();
2277             }
2278         }
2279
2280         ///<summary>
2281         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2282         ///</summary>
2283         /// <example>
2284         /// <code>
2285         /// // matchParentView matches its size to its parent size.
2286         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2287         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2288         ///
2289         /// // wrapContentView wraps its children with their desired size.
2290         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2291         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2292         ///
2293         /// // exactSizeView shows itself with an exact size.
2294         /// exactSizeView.WidthSpecification = 100;
2295         /// exactSizeView.HeightSpecification = 100;
2296         /// </code>
2297         /// </example>
2298         /// <since_tizen> 6 </since_tizen>
2299         [Binding.TypeConverter(typeof(IntDpTypeConverter))]
2300         public int WidthSpecification
2301         {
2302             get
2303             {
2304                 return (int)GetValue(WidthSpecificationProperty);
2305             }
2306             set
2307             {
2308                 SetValue(WidthSpecificationProperty, value);
2309                 NotifyPropertyChanged();
2310             }
2311         }
2312
2313         private int InternalWidthSpecification
2314         {
2315             get
2316             {
2317                 return widthPolicy;
2318             }
2319             set
2320             {
2321                 if (value == widthPolicy)
2322                     return;
2323
2324                 widthPolicy = value;
2325                 if (widthPolicy >= 0)
2326                 {
2327                     if (heightPolicy >= 0) // Policy an exact value
2328                     {
2329                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2330                         Size2D = new Size2D(widthPolicy, heightPolicy);
2331                     }
2332                 }
2333                 layout?.RequestLayout();
2334             }
2335         }
2336
2337         ///<summary>
2338         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2339         ///</summary>
2340         /// <example>
2341         /// <code>
2342         /// // matchParentView matches its size to its parent size.
2343         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2344         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2345         ///
2346         /// // wrapContentView wraps its children with their desired size.
2347         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2348         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2349         ///
2350         /// // exactSizeView shows itself with an exact size.
2351         /// exactSizeView.WidthSpecification = 100;
2352         /// exactSizeView.HeightSpecification = 100;
2353         /// </code>
2354         /// </example>
2355         /// <since_tizen> 6 </since_tizen>
2356         [Binding.TypeConverter(typeof(IntDpTypeConverter))]
2357         public int HeightSpecification
2358         {
2359             get
2360             {
2361                 return (int)GetValue(HeightSpecificationProperty);
2362             }
2363             set
2364             {
2365                 SetValue(HeightSpecificationProperty, value);
2366                 NotifyPropertyChanged();
2367             }
2368         }
2369
2370         private int InternalHeightSpecification
2371         {
2372             get
2373             {
2374                 return heightPolicy;
2375             }
2376             set
2377             {
2378                 if (value == heightPolicy)
2379                     return;
2380
2381                 heightPolicy = value;
2382                 if (heightPolicy >= 0)
2383                 {
2384                     if (widthPolicy >= 0) // Policy an exact value
2385                     {
2386                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2387                         Size2D = new Size2D(widthPolicy, heightPolicy);
2388                     }
2389                 }
2390                 layout?.RequestLayout();
2391             }
2392         }
2393
2394         ///<summary>
2395         /// Gets the List of transitions for this View.
2396         ///</summary>
2397         /// <since_tizen> 6 </since_tizen>
2398         public Dictionary<TransitionCondition, TransitionList> LayoutTransitions
2399         {
2400             get
2401             {
2402                 if (layoutTransitions == null)
2403                 {
2404                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2405                 }
2406                 return layoutTransitions;
2407             }
2408         }
2409
2410         ///<summary>
2411         /// Sets a layout transitions for this View.
2412         ///</summary>
2413         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
2414         /// <remarks>
2415         /// Use LayoutTransitions to receive a collection of LayoutTransitions set on the View.
2416         /// </remarks>
2417         /// <since_tizen> 6 </since_tizen>
2418         public LayoutTransition LayoutTransition
2419         {
2420             get
2421             {
2422                 return GetValue(LayoutTransitionProperty) as LayoutTransition;
2423             }
2424             set
2425             {
2426                 SetValue(LayoutTransitionProperty, value);
2427                 NotifyPropertyChanged();
2428             }
2429         }
2430
2431         private LayoutTransition InternalLayoutTransition
2432         {
2433             get
2434             {
2435                 return layoutTransition;
2436             }
2437             set
2438             {
2439                 if (value == null)
2440                 {
2441                     throw new global::System.ArgumentNullException(nameof(value));
2442                 }
2443                 if (layoutTransitions == null)
2444                 {
2445                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2446                 }
2447
2448                 LayoutTransitionsHelper.AddTransitionForCondition(layoutTransitions, value.Condition, value, true);
2449
2450                 AttachTransitionsToChildren(value);
2451
2452                 layoutTransition = value;
2453             }
2454         }
2455
2456         /// <summary>
2457         /// Deprecated in API5; Will be removed in API8. Please use Padding instead.
2458         /// </summary>
2459         /// <remarks>
2460         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
2461         /// </remarks>
2462         /// <since_tizen> 4 </since_tizen>
2463         [Obsolete("Deprecated in API5; Will be removed in API8. Please use Padding instead.")]
2464         [EditorBrowsable(EditorBrowsableState.Never)]
2465         public Extents PaddingEX
2466         {
2467             get
2468             {
2469                 return GetValue(PaddingEXProperty) as Extents;
2470             }
2471             set
2472             {
2473                 SetValue(PaddingEXProperty, value);
2474             }
2475         }
2476
2477         private Extents InternalPaddingEX
2478         {
2479             get
2480             {
2481                 Extents temp = new Extents(0, 0, 0, 0);
2482                 var pValue = GetProperty(View.Property.PADDING);
2483                 pValue.Get(temp);
2484                 pValue.Dispose();
2485                 Extents ret = new Extents(OnPaddingEXChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2486                 temp.Dispose();
2487                 return ret;
2488             }
2489             set
2490             {
2491                 var temp = new Tizen.NUI.PropertyValue(value);
2492                 SetProperty(View.Property.PADDING, temp);
2493                 temp.Dispose();
2494                 NotifyPropertyChanged();
2495                 layout?.RequestLayout();
2496             }
2497         }
2498
2499         [EditorBrowsable(EditorBrowsableState.Never)]
2500         public XamlStyle XamlStyle
2501         {
2502             get
2503             {
2504                 return (XamlStyle)GetValue(XamlStyleProperty);
2505             }
2506             set
2507             {
2508                 SetValue(XamlStyleProperty, value);
2509             }
2510         }
2511
2512         /// <summary>
2513         /// The Color of View. This is an RGBA value.
2514         /// </summary>
2515         /// <remarks>
2516         /// <para>
2517         /// Animatable - This property can be animated using <c>Animation</c> class.
2518         /// </para>
2519         /// The property cascade chaining set is possible. For example, this (view.Color.X = 0.1f;) is possible.
2520         /// </remarks>
2521         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2522         [EditorBrowsable(EditorBrowsableState.Never)]
2523         public Color Color
2524         {
2525             get
2526             {
2527                 Color temp = (Color)GetValue(ColorProperty);
2528                 return new Color(OnColorChanged, temp.R, temp.G, temp.B, temp.A);
2529             }
2530             set
2531             {
2532                 SetValue(ColorProperty, value);
2533                 NotifyPropertyChanged();
2534             }
2535         }
2536
2537         /// <summary>
2538         /// Set the layout on this View. Replaces any existing Layout.
2539         /// </summary>
2540         /// <remarks>
2541         /// If this Layout is set as null explicitly, it means this View itself and it's child Views will not use Layout anymore.
2542         /// </remarks>
2543         /// <since_tizen> 6 </since_tizen>
2544         public LayoutItem Layout
2545         {
2546             get
2547             {
2548                 return GetValue(LayoutProperty) as LayoutItem;
2549             }
2550             set
2551             {
2552                 SetValue(LayoutProperty, value);
2553             }
2554         }
2555
2556         private LayoutItem InternalLayout
2557         {
2558             get
2559             {
2560                 return layout;
2561             }
2562             set
2563             {
2564                 // Do nothing if layout provided is already set on this View.
2565                 if (value == layout)
2566                 {
2567                     return;
2568                 }
2569
2570                 LayoutingDisabled = false;
2571                 layoutSet = true;
2572
2573                 // If new layout being set already has a owner then that owner receives a replacement default layout.
2574                 // First check if the layout to be set already has a owner.
2575                 if (value?.Owner != null)
2576                 {
2577                     // Previous owner of the layout gets a default layout as a replacement.
2578                     value.Owner.Layout = new AbsoluteLayout()
2579                     {
2580                         // Copy Margin and Padding to replacement LayoutGroup.
2581                         Margin = value.Margin,
2582                         Padding = value.Padding,
2583                     };
2584                 }
2585
2586                 // Copy Margin and Padding to new layout being set or restore padding and margin back to
2587                 // View if no replacement. Previously margin and padding values would have been moved from
2588                 // the View to the layout.
2589                 if (layout != null) // Existing layout
2590                 {
2591                     if (value != null)
2592                     {
2593                         // Existing layout being replaced so copy over margin and padding values.
2594                         value.Margin = layout.Margin;
2595                         value.Padding = layout.Padding;
2596                         value.SetPositionByLayout = !excludeLayouting;
2597                     }
2598                     else
2599                     {
2600                         // Layout not being replaced so restore margin and padding to View.
2601                         SetValue(MarginProperty, layout.Margin);
2602                         SetValue(PaddingProperty, layout.Padding);
2603                         NotifyPropertyChanged();
2604                     }
2605                 }
2606                 else
2607                 {
2608                     // First Layout to be added to the View hence copy
2609
2610                     // Do not try to set Margins or Padding on a null Layout (when a layout is being removed from a View)
2611                     if (value != null)
2612                     {
2613                         Extents margin = Margin;
2614                         Extents padding = Padding;
2615                         if (margin.Top != 0 || margin.Bottom != 0 || margin.Start != 0 || margin.End != 0)
2616                         {
2617                             // If View already has a margin set then store it in Layout instead.
2618                             value.Margin = margin;
2619                             SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2620                             NotifyPropertyChanged();
2621                         }
2622
2623                         if (padding.Top != 0 || padding.Bottom != 0 || padding.Start != 0 || padding.End != 0)
2624                         {
2625                             // If View already has a padding set then store it in Layout instead.
2626                             value.Padding = padding;
2627
2628                             // If Layout is a LayoutItem then it could be a View that handles it's own padding.
2629                             // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
2630                             if (typeof(LayoutGroup).IsAssignableFrom(value.GetType()))
2631                             {
2632                                 SetValue(PaddingProperty, new Extents(0, 0, 0, 0));
2633                                 NotifyPropertyChanged();
2634                             }
2635                         }
2636
2637                         value.SetPositionByLayout = !excludeLayouting;
2638                     }
2639                 }
2640
2641                 // Remove existing layout from it's parent layout group.
2642                 layout?.Unparent();
2643
2644                 // Set layout to this view
2645                 SetLayout(value);
2646             }
2647         }
2648
2649         /// <summary>
2650         /// The weight of the View, used to share available space in a layout with siblings.
2651         /// </summary>
2652         /// <since_tizen> 6 </since_tizen>
2653         public float Weight
2654         {
2655             get
2656             {
2657                 return weight;
2658             }
2659             set
2660             {
2661                 weight = value;
2662                 layout?.RequestLayout();
2663             }
2664         }
2665
2666         /// <summary>
2667         ///  Whether to load the BackgroundImage synchronously.
2668         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
2669         ///  Note: For Normal Quad images only.
2670         /// </summary>
2671         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2672         [EditorBrowsable(EditorBrowsableState.Never)]
2673         public bool BackgroundImageSynchronosLoading
2674         {
2675             get
2676             {
2677                 return (bool)GetValue(BackgroundImageSynchronosLoadingProperty);
2678             }
2679             set
2680             {
2681                 SetValue(BackgroundImageSynchronosLoadingProperty, value);
2682                 NotifyPropertyChanged();
2683             }
2684         }
2685
2686         private bool InternalBackgroundImageSynchronosLoading
2687         {
2688             get
2689             {
2690                 return BackgroundImageSynchronousLoading;
2691             }
2692             set
2693             {
2694                 BackgroundImageSynchronousLoading = value;
2695             }
2696         }
2697
2698         /// <summary>
2699         ///  Whether to load the BackgroundImage synchronously.
2700         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
2701         ///  Note: For Normal Quad images only.
2702         /// </summary>
2703         /// This will be public opened in tizen_7.0 after ACR done. Before ACR, need to be hidden as inhouse API.
2704         [EditorBrowsable(EditorBrowsableState.Never)]
2705         public bool BackgroundImageSynchronousLoading
2706         {
2707             get
2708             {
2709                 return (bool)GetValue(BackgroundImageSynchronousLoadingProperty);
2710             }
2711             set
2712             {
2713                 SetValue(BackgroundImageSynchronousLoadingProperty, value);
2714                 NotifyPropertyChanged();
2715             }
2716         }
2717
2718         private bool InternalBackgroundImageSynchronousLoading
2719         {
2720             get
2721             {
2722                 return backgroundImageSynchronousLoading;
2723             }
2724             set
2725             {
2726                 backgroundImageSynchronousLoading = value;
2727
2728                 string bgUrl = null;
2729                 var pValue = Background.Find(ImageVisualProperty.URL);
2730                 pValue?.Get(out bgUrl);
2731                 pValue?.Dispose();
2732
2733                 if (!string.IsNullOrEmpty(bgUrl))
2734                 {
2735                     PropertyMap bgMap = this.Background;
2736                     var temp = new PropertyValue(backgroundImageSynchronousLoading);
2737                     bgMap.Add("synchronousLoading", temp);
2738                     temp.Dispose();
2739                     Background = bgMap;
2740                 }
2741             }
2742         }
2743
2744         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
2745         [EditorBrowsable(EditorBrowsableState.Never)]
2746         public Vector2 UpdateSizeHint
2747         {
2748             get
2749             {
2750                 return (Vector2)GetValue(UpdateSizeHintProperty);
2751             }
2752             set
2753             {
2754                 SetValue(UpdateSizeHintProperty, value);
2755                 NotifyPropertyChanged();
2756             }
2757         }
2758
2759         /// <summary>
2760         /// Enable/Disable ControlState propagation for children.
2761         /// It is false by default.
2762         /// If the View needs to share ControlState with descendants, please set it true.
2763         /// Please note that, changing the value will also changes children's EnableControlStatePropagation value recursively.
2764         /// </summary>
2765         [EditorBrowsable(EditorBrowsableState.Never)]
2766         public bool EnableControlStatePropagation
2767         {
2768             get
2769             {
2770                 return (bool)GetValue(EnableControlStatePropagationProperty);
2771             }
2772             set
2773             {
2774                 SetValue(EnableControlStatePropagationProperty, value);
2775                 NotifyPropertyChanged();
2776             }
2777         }
2778
2779         private bool InternalEnableControlStatePropagation
2780         {
2781             get => themeData?.ControlStatePropagation ?? false;
2782             set
2783             {
2784                 if (InternalEnableControlStatePropagation == value) return;
2785
2786                 if (themeData == null) themeData = new ThemeData();
2787
2788                 themeData.ControlStatePropagation = value;
2789
2790                 foreach (View child in Children)
2791                 {
2792                     child.EnableControlStatePropagation = value;
2793                 }
2794             }
2795         }
2796
2797         /// <summary>
2798         /// By default, it is false in View, true in Control.
2799         /// Note that if the value is true, the View will be a touch receptor.
2800         /// </summary>
2801         [EditorBrowsable(EditorBrowsableState.Never)]
2802         public bool EnableControlState
2803         {
2804             get
2805             {
2806                 return (bool)GetValue(EnableControlStateProperty);
2807             }
2808             set
2809             {
2810                 SetValue(EnableControlStateProperty, value);
2811             }
2812         }
2813
2814         /// <summary>
2815         /// Whether the actor grab all touches even if touch leaves its boundary.
2816         /// </summary>
2817         /// <returns>true, if it grab all touch after start</returns>
2818         [EditorBrowsable(EditorBrowsableState.Never)]
2819         public bool GrabTouchAfterLeave
2820         {
2821             get
2822             {
2823                 return (bool)GetValue(GrabTouchAfterLeaveProperty);
2824             }
2825             set
2826             {
2827                 SetValue(GrabTouchAfterLeaveProperty, value);
2828             }
2829         }
2830
2831         private bool InternalGrabTouchAfterLeave
2832         {
2833             get
2834             {
2835                 bool temp = false;
2836                 var pValue = GetProperty(View.Property.CaptureAllTouchAfterStart);
2837                 pValue.Get(out temp);
2838                 pValue.Dispose();
2839                 return temp;
2840             }
2841             set
2842             {
2843                 var temp = new Tizen.NUI.PropertyValue(value);
2844                 SetProperty(View.Property.CaptureAllTouchAfterStart, temp);
2845                 temp.Dispose();
2846                 NotifyPropertyChanged();
2847             }
2848         }
2849
2850         /// <summary>
2851         /// Determines which blend equation will be used to render renderers of this actor.
2852         /// </summary>
2853         /// <returns>blend equation enum currently assigned</returns>
2854         /// This will be public opened in next tizen after ACR done. Before ACR, need to be hidden as inhouse API.
2855         [EditorBrowsable(EditorBrowsableState.Never)]
2856         public BlendEquationType BlendEquation
2857         {
2858             get
2859             {
2860                 return (BlendEquationType)GetValue(BlendEquationProperty);
2861             }
2862             set
2863             {
2864                 SetValue(BlendEquationProperty, value);
2865             }
2866         }
2867
2868         private BlendEquationType InternalBlendEquation
2869         {
2870             get
2871             {
2872                 int temp = 0;
2873                 var pValue = GetProperty(View.Property.BlendEquation);
2874                 pValue.Get(out temp);
2875                 pValue.Dispose();
2876                 return (BlendEquationType)temp;
2877             }
2878             set
2879             {
2880                 var temp = new Tizen.NUI.PropertyValue((int)value);
2881                 SetProperty(View.Property.BlendEquation, temp);
2882                 temp.Dispose();
2883                 NotifyPropertyChanged();
2884             }
2885         }
2886
2887         /// <summary>
2888         /// If the value is true, the View will change its style as the theme changes.
2889         /// The default value is false in normal case but it can be true when the NUIApplication is created with <see cref="NUIApplication.ThemeOptions.ThemeChangeSensitive"/>.
2890         /// </summary>
2891         /// <since_tizen> 9 </since_tizen>
2892         public bool ThemeChangeSensitive
2893         {
2894             get => (bool)GetValue(ThemeChangeSensitiveProperty);
2895             set => SetValue(ThemeChangeSensitiveProperty, value);
2896         }
2897
2898         /// <summary>
2899         /// Create Style, it is abstract function and must be override.
2900         /// </summary>
2901         [EditorBrowsable(EditorBrowsableState.Never)]
2902         protected virtual ViewStyle CreateViewStyle()
2903         {
2904             return new ViewStyle();
2905         }
2906
2907         /// <summary>
2908         /// Called after the View's ControlStates changed.
2909         /// </summary>
2910         /// <param name="controlStateChangedInfo">The information including state changed variables.</param>
2911         [EditorBrowsable(EditorBrowsableState.Never)]
2912         protected virtual void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
2913         {
2914         }
2915
2916         /// <summary>
2917         /// </summary>
2918         [EditorBrowsable(EditorBrowsableState.Never)]
2919         protected virtual void OnThemeChanged(object sender, ThemeChangedEventArgs e)
2920         {
2921             if (string.IsNullOrEmpty(styleName)) ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(GetType()));
2922             else ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(styleName));
2923         }
2924
2925         /// <summary>
2926         /// Apply style instance to the view.
2927         /// Basically it sets the bindable property to the value of the bindable property with same name in the style.
2928         /// </summary>
2929         /// <since_tizen> 9 </since_tizen>
2930         public virtual void ApplyStyle(ViewStyle viewStyle)
2931         {
2932             if (viewStyle == null || themeData?.viewStyle == viewStyle) return;
2933
2934             if (themeData == null) themeData = new ThemeData();
2935
2936             themeData.viewStyle = viewStyle;
2937
2938             if (viewStyle.DirtyProperties == null || viewStyle.DirtyProperties.Count == 0)
2939             {
2940                 // Nothing to apply
2941                 return;
2942             }
2943
2944             BindableProperty.GetBindablePropertysOfType(GetType(), out var bindablePropertyOfView);
2945
2946             if (bindablePropertyOfView == null)
2947             {
2948                 return;
2949             }
2950
2951             var dirtyStyleProperties = new BindableProperty[viewStyle.DirtyProperties.Count];
2952             viewStyle.DirtyProperties.CopyTo(dirtyStyleProperties);
2953
2954             foreach (var sourceProperty in dirtyStyleProperties)
2955             {
2956                 var sourceValue = viewStyle.GetValue(sourceProperty);
2957
2958                 if (sourceValue == null)
2959                 {
2960                     continue;
2961                 }
2962
2963                 bindablePropertyOfView.TryGetValue(sourceProperty.PropertyName, out var destinationProperty);
2964
2965                 if (destinationProperty != null)
2966                 {
2967                     SetValue(destinationProperty, sourceValue);
2968                 }
2969             }
2970         }
2971
2972         /// <summary>
2973         /// Get whether the View is culled or not.
2974         /// True means that the View is out of the view frustum.
2975         /// </summary>
2976         /// <remarks>
2977         /// Hidden-API (Inhouse-API).
2978         /// </remarks>
2979         [EditorBrowsable(EditorBrowsableState.Never)]
2980         public bool Culled
2981         {
2982             get
2983             {
2984                 bool temp = false;
2985                 var pValue = GetProperty(View.Property.Culled);
2986                 pValue.Get(out temp);
2987                 pValue.Dispose();
2988                 return temp;
2989             }
2990         }
2991
2992         /// <summary>
2993         /// Set or Get TransitionOptions for the page transition.
2994         /// This property is used to define how this view will be transitioned during Page switching.
2995         /// </summary>
2996         /// <since_tizen> 9 </since_tizen>
2997         public TransitionOptions TransitionOptions
2998         {
2999             get
3000             {
3001                 return GetValue(TransitionOptionsProperty) as TransitionOptions;
3002             }
3003             set
3004             {
3005                 SetValue(TransitionOptionsProperty, value);
3006                 NotifyPropertyChanged();
3007             }
3008         }
3009
3010         private TransitionOptions InternalTransitionOptions
3011         {
3012             set
3013             {
3014                 transitionOptions = value;
3015             }
3016             get
3017             {
3018                 return transitionOptions;
3019             }
3020         }
3021
3022         /// <summary>
3023         /// Gets or sets the status of whether the view should emit key event signals.
3024         /// If a View's DispatchKeyEvents is set to false, then it's children will not emit a key event signal either.
3025         /// </summary>
3026         [EditorBrowsable(EditorBrowsableState.Never)]
3027         public bool DispatchKeyEvents
3028         {
3029             get
3030             {
3031                 return (bool)GetValue(DispatchKeyEventsProperty);
3032             }
3033             set
3034             {
3035                 SetValue(DispatchKeyEventsProperty, value);
3036                 NotifyPropertyChanged();
3037             }
3038         }
3039
3040
3041
3042
3043     }
3044 }