[NUI] Ignore ResizePolicy when View size is calculated by Layout
[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                 // Store ResizePolicy to restore it when Layout is unset.
1860                 widthResizePolicy = value;
1861
1862                 SetValue(WidthResizePolicyProperty, value);
1863                 NotifyPropertyChanged();
1864             }
1865         }
1866
1867         /// <summary>
1868         /// Gets or sets the height resize policy to be used.
1869         /// </summary>
1870         /// <since_tizen> 3 </since_tizen>
1871         public ResizePolicyType HeightResizePolicy
1872         {
1873             get
1874             {
1875                 return (ResizePolicyType)GetValue(HeightResizePolicyProperty);
1876             }
1877             set
1878             {
1879                 // Store ResizePolicy to restore it when Layout is unset.
1880                 heightResizePolicy = value;
1881
1882                 SetValue(HeightResizePolicyProperty, value);
1883                 NotifyPropertyChanged();
1884             }
1885         }
1886
1887         /// <summary>
1888         /// Gets or sets the policy to use when setting size with size negotiation.<br />
1889         /// Defaults to SizeScalePolicyType.UseSizeSet.<br />
1890         /// </summary>
1891         /// <since_tizen> 3 </since_tizen>
1892         public SizeScalePolicyType SizeScalePolicy
1893         {
1894             get
1895             {
1896                 return (SizeScalePolicyType)GetValue(SizeScalePolicyProperty);
1897             }
1898             set
1899             {
1900                 SetValue(SizeScalePolicyProperty, value);
1901                 NotifyPropertyChanged();
1902             }
1903         }
1904
1905         /// <summary>
1906         ///  Gets or sets the status of whether the width size is dependent on the height size.
1907         /// </summary>
1908         /// <since_tizen> 3 </since_tizen>
1909         public bool WidthForHeight
1910         {
1911             get
1912             {
1913                 return (bool)GetValue(WidthForHeightProperty);
1914             }
1915             set
1916             {
1917                 SetValue(WidthForHeightProperty, value);
1918                 NotifyPropertyChanged();
1919             }
1920         }
1921
1922         /// <summary>
1923         /// Gets or sets the status of whether the height size is dependent on the width size.
1924         /// </summary>
1925         /// <since_tizen> 3 </since_tizen>
1926         public bool HeightForWidth
1927         {
1928             get
1929             {
1930                 return (bool)GetValue(HeightForWidthProperty);
1931             }
1932             set
1933             {
1934                 SetValue(HeightForWidthProperty, value);
1935                 NotifyPropertyChanged();
1936             }
1937         }
1938
1939         /// <summary>
1940         /// Gets or sets the padding for use in layout.
1941         /// </summary>
1942         /// <remarks>
1943         /// The property cascade chaining set is possible. For example, this (view.Padding.X = 0.1f;) is possible.
1944         /// </remarks>
1945         /// <since_tizen> 5 </since_tizen>
1946         public Extents Padding
1947         {
1948             get
1949             {
1950                 // If View has a Layout then padding in stored in the base Layout class
1951                 if (Layout != null)
1952                 {
1953                     return Layout.Padding;
1954                 }
1955                 else
1956                 {
1957                     Extents temp = (Extents)GetValue(PaddingProperty);
1958                     return new Extents(OnPaddingChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
1959                 }
1960                 // Two return points to prevent creating a zeroed Extent native object before assignment
1961             }
1962             set
1963             {
1964                 Extents padding = value;
1965                 if (Layout != null)
1966                 {
1967                     // Layout set so store Padding in LayoutItem instead of in View.
1968                     // If View stores the Padding value then Legacy Size Negotiation will overwrite
1969                     // the position and sizes measure in the Layouting.
1970                     Layout.Padding = value;
1971                     // If Layout is a LayoutItem then it could be a View that handles it's own padding.
1972                     // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
1973                     if (typeof(LayoutGroup).IsAssignableFrom(Layout.GetType())) // If a Layout container of some kind.
1974                     {
1975                         padding = new Extents(0, 0, 0, 0); // Reset value stored in View.
1976                     }
1977                 }
1978
1979                 SetValue(PaddingProperty, padding);
1980                 NotifyPropertyChanged();
1981             }
1982         }
1983
1984         /// <summary>
1985         /// Gets or sets the minimum size the view can be assigned in size negotiation.
1986         /// </summary>
1987         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
1988         /// <remarks>
1989         /// The property cascade chaining set is possible. For example, this (view.MinimumSize.Width = 1;) is possible.
1990         /// </remarks>
1991         /// <since_tizen> 3 </since_tizen>
1992         public Size2D MinimumSize
1993         {
1994             get
1995             {
1996                 Size2D tmp = (Size2D)GetValue(MinimumSizeProperty);
1997                 return new Size2D(OnMinimumSizeChanged, tmp.Width, tmp.Height);
1998             }
1999             set
2000             {
2001                 if (value == null)
2002                 {
2003                     throw new ArgumentNullException(nameof(value));
2004                 }
2005                 if (layout != null)
2006                 {
2007                     // Note: it only works if minimum size is >= than natural size.
2008                     // To force the size it should be done through the width&height spec or Size2D.
2009                     layout.MinimumWidth = new Tizen.NUI.LayoutLength(value.Width);
2010                     layout.MinimumHeight = new Tizen.NUI.LayoutLength(value.Height);
2011                     layout.RequestLayout();
2012                 }
2013                 SetValue(MinimumSizeProperty, value);
2014                 NotifyPropertyChanged();
2015             }
2016         }
2017
2018         /// <summary>
2019         /// Gets or sets the maximum size the view can be assigned in size negotiation.
2020         /// </summary>
2021         /// <remarks>
2022         /// The property cascade chaining set is possible. For example, this (view.MaximumSize.Width = 1;) is possible.
2023         /// </remarks>
2024         /// <since_tizen> 3 </since_tizen>
2025         public Size2D MaximumSize
2026         {
2027             get
2028             {
2029                 Size2D tmp = (Size2D)GetValue(MaximumSizeProperty);
2030                 return new Size2D(OnMaximumSizeChanged, tmp.Width, tmp.Height);
2031             }
2032             set
2033             {
2034                 // We don't have Layout.Maximum(Width|Height) so we cannot apply it to layout.
2035                 // MATCH_PARENT spec + parent container size can be used to limit
2036                 if (layout != null)
2037                 {
2038                     layout.RequestLayout();
2039                 }
2040                 SetValue(MaximumSizeProperty, value);
2041                 NotifyPropertyChanged();
2042             }
2043         }
2044
2045         /// <summary>
2046         /// Gets or sets whether a child view inherits it's parent's position.<br />
2047         /// Default is to inherit.<br />
2048         /// 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 />
2049         /// </summary>
2050         /// <since_tizen> 3 </since_tizen>
2051         public bool InheritPosition
2052         {
2053             get
2054             {
2055                 return (bool)GetValue(InheritPositionProperty);
2056             }
2057             set
2058             {
2059                 SetValue(InheritPositionProperty, value);
2060                 NotifyPropertyChanged();
2061             }
2062         }
2063
2064         /// <summary>
2065         /// Gets or sets the clipping behavior (mode) of it's children.
2066         /// </summary>
2067         /// <since_tizen> 3 </since_tizen>
2068         public ClippingModeType ClippingMode
2069         {
2070             get
2071             {
2072                 return (ClippingModeType)GetValue(ClippingModeProperty);
2073             }
2074             set
2075             {
2076                 SetValue(ClippingModeProperty, value);
2077                 NotifyPropertyChanged();
2078             }
2079         }
2080
2081         /// <summary>
2082         /// Gets the number of renderers held by the view.
2083         /// </summary>
2084         /// <since_tizen> 3 </since_tizen>
2085         public uint RendererCount
2086         {
2087             get
2088             {
2089                 return GetRendererCount();
2090             }
2091         }
2092
2093         /// <summary>
2094         /// Deprecated in API5; Will be removed in API8. Please use PivotPoint instead!
2095         /// </summary>
2096         /// <remarks>
2097         /// The property cascade chaining set is possible. For example, this (view.AnchorPoint.X = 0.1f;) is possible.
2098         /// </remarks>
2099         /// <since_tizen> 3 </since_tizen>
2100         [Obsolete("Deprecated in API5; Will be removed in API8. Please use PivotPoint instead! " +
2101             "Like: " +
2102             "View view = new View(); " +
2103             "view.PivotPoint = PivotPoint.Center; " +
2104             "view.PositionUsesPivotPoint = true;")]
2105         [EditorBrowsable(EditorBrowsableState.Never)]
2106         public Position AnchorPoint
2107         {
2108             get
2109             {
2110                 return GetValue(AnchorPointProperty) as Position;
2111             }
2112             set
2113             {
2114                 SetValue(AnchorPointProperty, value);
2115             }
2116         }
2117
2118         private Position InternalAnchorPoint
2119         {
2120             get
2121             {
2122                 Position temp = new Position(0.0f, 0.0f, 0.0f);
2123                 var pValue = GetProperty(View.Property.AnchorPoint);
2124                 pValue.Get(temp);
2125                 pValue.Dispose();
2126                 Position ret = new Position(OnAnchorPointChanged, temp.X, temp.Y, temp.Z);
2127                 temp.Dispose();
2128                 return ret;
2129             }
2130             set
2131             {
2132                 var temp = new Tizen.NUI.PropertyValue(value);
2133                 SetProperty(View.Property.AnchorPoint, temp);
2134                 temp.Dispose();
2135                 NotifyPropertyChanged();
2136             }
2137         }
2138
2139         /// <summary>
2140         /// Sets the size of a view for the width, the height and the depth.<br />
2141         /// Geometry can be scaled to fit within this area.<br />
2142         /// This does not interfere with the view's scale factor.<br />
2143         /// The views default depth is the minimum of width and height.<br />
2144         /// </summary>
2145         /// <remarks>
2146         /// <para>
2147         /// Animatable - This property can be animated using <c>Animation</c> class.
2148         /// <code>
2149         /// animation.AnimateTo(view, "Size", new Size(100, 100));
2150         /// </code>
2151         /// </para>
2152         /// The property cascade chaining set is possible. For example, this (view.Size.Width = 1.0f;) is possible.
2153         /// </remarks>
2154         /// <since_tizen> 5 </since_tizen>
2155         public Size Size
2156         {
2157             get
2158             {
2159                 Size tmp = (Size)GetValue(SizeProperty);
2160                 return new Size(OnSizeChanged, tmp.Width, tmp.Height, tmp.Depth);
2161             }
2162             set
2163             {
2164                 SetValue(SizeProperty, value);
2165                 NotifyPropertyChanged();
2166             }
2167         }
2168
2169         /// <summary>
2170         /// Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead!
2171         /// </summary>
2172         /// <since_tizen> 3 </since_tizen>
2173         [Obsolete("Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead! " +
2174             "Like: " +
2175             "Container parent =  view.GetParent(); " +
2176             "View view = parent as View;")]
2177         [EditorBrowsable(EditorBrowsableState.Never)]
2178         public new View Parent
2179         {
2180             get
2181             {
2182                 View ret;
2183                 IntPtr cPtr = Interop.Actor.GetParent(SwigCPtr);
2184                 HandleRef CPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
2185                 BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(CPtr.Handle);
2186
2187                 if (basehandle is Layer layer)
2188                 {
2189                     ret = new View(Layer.getCPtr(layer).Handle, false);
2190                     NUILog.Error("This Parent property is deprecated, should do not be used");
2191                 }
2192                 else
2193                 {
2194                     ret = basehandle as View;
2195                 }
2196
2197                 Interop.BaseHandle.DeleteBaseHandle(CPtr);
2198                 CPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
2199
2200                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
2201                 return ret;
2202             }
2203         }
2204
2205         /// <summary>
2206         /// Gets/Sets whether inherit parent's the layout Direction.
2207         /// </summary>
2208         /// <since_tizen> 4 </since_tizen>
2209         public bool InheritLayoutDirection
2210         {
2211             get
2212             {
2213                 return (bool)GetValue(InheritLayoutDirectionProperty);
2214             }
2215             set
2216             {
2217                 SetValue(InheritLayoutDirectionProperty, value);
2218                 NotifyPropertyChanged();
2219             }
2220         }
2221
2222         /// <summary>
2223         /// Gets/Sets the layout Direction.
2224         /// </summary>
2225         /// <since_tizen> 4 </since_tizen>
2226         public ViewLayoutDirectionType LayoutDirection
2227         {
2228             get
2229             {
2230                 return (ViewLayoutDirectionType)GetValue(LayoutDirectionProperty);
2231             }
2232             set
2233             {
2234                 SetValue(LayoutDirectionProperty, value);
2235                 NotifyPropertyChanged();
2236                 layout?.RequestLayout();
2237             }
2238         }
2239
2240         /// <summary>
2241         /// Gets or sets the Margin for use in layout.
2242         /// </summary>
2243         /// <remarks>
2244         /// Margin property is supported by Layout algorithms and containers.
2245         /// Please Set Layout if you want to use Margin property.
2246         /// The property cascade chaining set is possible. For example, this (view.Margin.X = 0.1f;) is possible.
2247         /// </remarks>
2248         /// <since_tizen> 4 </since_tizen>
2249         public Extents Margin
2250         {
2251             get
2252             {
2253                 // If View has a Layout then margin is stored in Layout.
2254                 if (Layout != null)
2255                 {
2256                     return Layout.Margin;
2257                 }
2258                 else
2259                 {
2260                     // If Layout not set then return margin stored in View.
2261                     Extents temp = (Extents)GetValue(MarginProperty);
2262                     return new Extents(OnMarginChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2263                 }
2264                 // Two return points to prevent creating a zeroed Extent native object before assignment
2265             }
2266             set
2267             {
2268                 if (Layout != null)
2269                 {
2270                     // Layout set so store Margin in LayoutItem instead of View.
2271                     // If View stores the Margin too then the Legacy Size Negotiation will
2272                     // overwrite the position and size values measured in the Layouting.
2273                     Layout.Margin = value;
2274                     SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2275                     layout?.RequestLayout();
2276                 }
2277                 else
2278                 {
2279                     SetValue(MarginProperty, value);
2280                 }
2281                 NotifyPropertyChanged();
2282                 layout?.RequestLayout();
2283             }
2284         }
2285
2286         ///<summary>
2287         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2288         ///</summary>
2289         /// <example>
2290         /// <code>
2291         /// // matchParentView matches its size to its parent size.
2292         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2293         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2294         ///
2295         /// // wrapContentView wraps its children with their desired size.
2296         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2297         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2298         ///
2299         /// // exactSizeView shows itself with an exact size.
2300         /// exactSizeView.WidthSpecification = 100;
2301         /// exactSizeView.HeightSpecification = 100;
2302         /// </code>
2303         /// </example>
2304         /// <since_tizen> 6 </since_tizen>
2305         [Binding.TypeConverter(typeof(IntDpTypeConverter))]
2306         public int WidthSpecification
2307         {
2308             get
2309             {
2310                 return (int)GetValue(WidthSpecificationProperty);
2311             }
2312             set
2313             {
2314                 SetValue(WidthSpecificationProperty, value);
2315                 NotifyPropertyChanged();
2316             }
2317         }
2318
2319         private int InternalWidthSpecification
2320         {
2321             get
2322             {
2323                 return widthPolicy;
2324             }
2325             set
2326             {
2327                 if (value == widthPolicy)
2328                     return;
2329
2330                 widthPolicy = value;
2331                 if (widthPolicy >= 0)
2332                 {
2333                     if (heightPolicy >= 0) // Policy an exact value
2334                     {
2335                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2336                         Size2D = new Size2D(widthPolicy, heightPolicy);
2337                     }
2338                 }
2339                 layout?.RequestLayout();
2340             }
2341         }
2342
2343         ///<summary>
2344         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2345         ///</summary>
2346         /// <example>
2347         /// <code>
2348         /// // matchParentView matches its size to its parent size.
2349         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2350         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2351         ///
2352         /// // wrapContentView wraps its children with their desired size.
2353         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2354         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2355         ///
2356         /// // exactSizeView shows itself with an exact size.
2357         /// exactSizeView.WidthSpecification = 100;
2358         /// exactSizeView.HeightSpecification = 100;
2359         /// </code>
2360         /// </example>
2361         /// <since_tizen> 6 </since_tizen>
2362         [Binding.TypeConverter(typeof(IntDpTypeConverter))]
2363         public int HeightSpecification
2364         {
2365             get
2366             {
2367                 return (int)GetValue(HeightSpecificationProperty);
2368             }
2369             set
2370             {
2371                 SetValue(HeightSpecificationProperty, value);
2372                 NotifyPropertyChanged();
2373             }
2374         }
2375
2376         private int InternalHeightSpecification
2377         {
2378             get
2379             {
2380                 return heightPolicy;
2381             }
2382             set
2383             {
2384                 if (value == heightPolicy)
2385                     return;
2386
2387                 heightPolicy = value;
2388                 if (heightPolicy >= 0)
2389                 {
2390                     if (widthPolicy >= 0) // Policy an exact value
2391                     {
2392                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2393                         Size2D = new Size2D(widthPolicy, heightPolicy);
2394                     }
2395                 }
2396                 layout?.RequestLayout();
2397             }
2398         }
2399
2400         ///<summary>
2401         /// Gets the List of transitions for this View.
2402         ///</summary>
2403         /// <since_tizen> 6 </since_tizen>
2404         public Dictionary<TransitionCondition, TransitionList> LayoutTransitions
2405         {
2406             get
2407             {
2408                 if (layoutTransitions == null)
2409                 {
2410                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2411                 }
2412                 return layoutTransitions;
2413             }
2414         }
2415
2416         ///<summary>
2417         /// Sets a layout transitions for this View.
2418         ///</summary>
2419         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
2420         /// <remarks>
2421         /// Use LayoutTransitions to receive a collection of LayoutTransitions set on the View.
2422         /// </remarks>
2423         /// <since_tizen> 6 </since_tizen>
2424         public LayoutTransition LayoutTransition
2425         {
2426             get
2427             {
2428                 return GetValue(LayoutTransitionProperty) as LayoutTransition;
2429             }
2430             set
2431             {
2432                 SetValue(LayoutTransitionProperty, value);
2433                 NotifyPropertyChanged();
2434             }
2435         }
2436
2437         private LayoutTransition InternalLayoutTransition
2438         {
2439             get
2440             {
2441                 return layoutTransition;
2442             }
2443             set
2444             {
2445                 if (value == null)
2446                 {
2447                     throw new global::System.ArgumentNullException(nameof(value));
2448                 }
2449                 if (layoutTransitions == null)
2450                 {
2451                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2452                 }
2453
2454                 LayoutTransitionsHelper.AddTransitionForCondition(layoutTransitions, value.Condition, value, true);
2455
2456                 AttachTransitionsToChildren(value);
2457
2458                 layoutTransition = value;
2459             }
2460         }
2461
2462         /// <summary>
2463         /// Deprecated in API5; Will be removed in API8. Please use Padding instead.
2464         /// </summary>
2465         /// <remarks>
2466         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
2467         /// </remarks>
2468         /// <since_tizen> 4 </since_tizen>
2469         [Obsolete("Deprecated in API5; Will be removed in API8. Please use Padding instead.")]
2470         [EditorBrowsable(EditorBrowsableState.Never)]
2471         public Extents PaddingEX
2472         {
2473             get
2474             {
2475                 return GetValue(PaddingEXProperty) as Extents;
2476             }
2477             set
2478             {
2479                 SetValue(PaddingEXProperty, value);
2480             }
2481         }
2482
2483         private Extents InternalPaddingEX
2484         {
2485             get
2486             {
2487                 Extents temp = new Extents(0, 0, 0, 0);
2488                 var pValue = GetProperty(View.Property.PADDING);
2489                 pValue.Get(temp);
2490                 pValue.Dispose();
2491                 Extents ret = new Extents(OnPaddingEXChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2492                 temp.Dispose();
2493                 return ret;
2494             }
2495             set
2496             {
2497                 var temp = new Tizen.NUI.PropertyValue(value);
2498                 SetProperty(View.Property.PADDING, temp);
2499                 temp.Dispose();
2500                 NotifyPropertyChanged();
2501                 layout?.RequestLayout();
2502             }
2503         }
2504
2505         [EditorBrowsable(EditorBrowsableState.Never)]
2506         public XamlStyle XamlStyle
2507         {
2508             get
2509             {
2510                 return (XamlStyle)GetValue(XamlStyleProperty);
2511             }
2512             set
2513             {
2514                 SetValue(XamlStyleProperty, value);
2515             }
2516         }
2517
2518         /// <summary>
2519         /// The Color of View. This is an RGBA value.
2520         /// </summary>
2521         /// <remarks>
2522         /// <para>
2523         /// Animatable - This property can be animated using <c>Animation</c> class.
2524         /// </para>
2525         /// The property cascade chaining set is possible. For example, this (view.Color.X = 0.1f;) is possible.
2526         /// </remarks>
2527         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2528         [EditorBrowsable(EditorBrowsableState.Never)]
2529         public Color Color
2530         {
2531             get
2532             {
2533                 Color temp = (Color)GetValue(ColorProperty);
2534                 return new Color(OnColorChanged, temp.R, temp.G, temp.B, temp.A);
2535             }
2536             set
2537             {
2538                 SetValue(ColorProperty, value);
2539                 NotifyPropertyChanged();
2540             }
2541         }
2542
2543         /// <summary>
2544         /// Set the layout on this View. Replaces any existing Layout.
2545         /// </summary>
2546         /// <remarks>
2547         /// If this Layout is set as null explicitly, it means this View itself and it's child Views will not use Layout anymore.
2548         /// </remarks>
2549         /// <since_tizen> 6 </since_tizen>
2550         public LayoutItem Layout
2551         {
2552             get
2553             {
2554                 return GetValue(LayoutProperty) as LayoutItem;
2555             }
2556             set
2557             {
2558                 // ResizePolicy is restored when Layout is unset and it is considered when View size is calculated.
2559                 // SetValue(LayoutProperty, value) sets InternalLayout only if layout is not null.
2560                 if (value == null)
2561                 {
2562                     RestoreResizePolicy();
2563                 }
2564
2565                 SetValue(LayoutProperty, value);
2566             }
2567         }
2568
2569         private LayoutItem InternalLayout
2570         {
2571             get
2572             {
2573                 return layout;
2574             }
2575             set
2576             {
2577                 // Do nothing if layout provided is already set on this View.
2578                 if (value == layout)
2579                 {
2580                     return;
2581                 }
2582
2583                 LayoutingDisabled = false;
2584                 layoutSet = true;
2585
2586                 // If new layout being set already has a owner then that owner receives a replacement default layout.
2587                 // First check if the layout to be set already has a owner.
2588                 if (value?.Owner != null)
2589                 {
2590                     // Previous owner of the layout gets a default layout as a replacement.
2591                     value.Owner.Layout = new AbsoluteLayout()
2592                     {
2593                         // Copy Margin and Padding to replacement LayoutGroup.
2594                         Margin = value.Margin,
2595                         Padding = value.Padding,
2596                     };
2597                 }
2598
2599                 // Copy Margin and Padding to new layout being set or restore padding and margin back to
2600                 // View if no replacement. Previously margin and padding values would have been moved from
2601                 // the View to the layout.
2602                 if (layout != null) // Existing layout
2603                 {
2604                     if (value != null)
2605                     {
2606                         // Existing layout being replaced so copy over margin and padding values.
2607                         value.Margin = layout.Margin;
2608                         value.Padding = layout.Padding;
2609                         value.SetPositionByLayout = !excludeLayouting;
2610                     }
2611                     else
2612                     {
2613                         // Layout not being replaced so restore margin and padding to View.
2614                         SetValue(MarginProperty, layout.Margin);
2615                         SetValue(PaddingProperty, layout.Padding);
2616                         NotifyPropertyChanged();
2617                     }
2618                 }
2619                 else
2620                 {
2621                     // First Layout to be added to the View hence copy
2622
2623                     // Do not try to set Margins or Padding on a null Layout (when a layout is being removed from a View)
2624                     if (value != null)
2625                     {
2626                         Extents margin = Margin;
2627                         Extents padding = Padding;
2628                         if (margin.Top != 0 || margin.Bottom != 0 || margin.Start != 0 || margin.End != 0)
2629                         {
2630                             // If View already has a margin set then store it in Layout instead.
2631                             value.Margin = margin;
2632                             SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2633                             NotifyPropertyChanged();
2634                         }
2635
2636                         if (padding.Top != 0 || padding.Bottom != 0 || padding.Start != 0 || padding.End != 0)
2637                         {
2638                             // If View already has a padding set then store it in Layout instead.
2639                             value.Padding = padding;
2640
2641                             // If Layout is a LayoutItem then it could be a View that handles it's own padding.
2642                             // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
2643                             if (typeof(LayoutGroup).IsAssignableFrom(value.GetType()))
2644                             {
2645                                 SetValue(PaddingProperty, new Extents(0, 0, 0, 0));
2646                                 NotifyPropertyChanged();
2647                             }
2648                         }
2649
2650                         value.SetPositionByLayout = !excludeLayouting;
2651                     }
2652                 }
2653
2654                 // Remove existing layout from it's parent layout group.
2655                 layout?.Unparent();
2656
2657                 // Set layout to this view
2658                 SetLayout(value);
2659             }
2660         }
2661
2662         /// <summary>
2663         /// The weight of the View, used to share available space in a layout with siblings.
2664         /// </summary>
2665         /// <since_tizen> 6 </since_tizen>
2666         public float Weight
2667         {
2668             get
2669             {
2670                 return weight;
2671             }
2672             set
2673             {
2674                 weight = value;
2675                 layout?.RequestLayout();
2676             }
2677         }
2678
2679         /// <summary>
2680         ///  Whether to load the BackgroundImage synchronously.
2681         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
2682         ///  Note: For Normal Quad images only.
2683         /// </summary>
2684         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2685         [EditorBrowsable(EditorBrowsableState.Never)]
2686         public bool BackgroundImageSynchronosLoading
2687         {
2688             get
2689             {
2690                 return (bool)GetValue(BackgroundImageSynchronosLoadingProperty);
2691             }
2692             set
2693             {
2694                 SetValue(BackgroundImageSynchronosLoadingProperty, value);
2695                 NotifyPropertyChanged();
2696             }
2697         }
2698
2699         private bool InternalBackgroundImageSynchronosLoading
2700         {
2701             get
2702             {
2703                 return BackgroundImageSynchronousLoading;
2704             }
2705             set
2706             {
2707                 BackgroundImageSynchronousLoading = value;
2708             }
2709         }
2710
2711         /// <summary>
2712         ///  Whether to load the BackgroundImage synchronously.
2713         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
2714         ///  Note: For Normal Quad images only.
2715         /// </summary>
2716         /// This will be public opened in tizen_7.0 after ACR done. Before ACR, need to be hidden as inhouse API.
2717         [EditorBrowsable(EditorBrowsableState.Never)]
2718         public bool BackgroundImageSynchronousLoading
2719         {
2720             get
2721             {
2722                 return (bool)GetValue(BackgroundImageSynchronousLoadingProperty);
2723             }
2724             set
2725             {
2726                 SetValue(BackgroundImageSynchronousLoadingProperty, value);
2727                 NotifyPropertyChanged();
2728             }
2729         }
2730
2731         private bool InternalBackgroundImageSynchronousLoading
2732         {
2733             get
2734             {
2735                 return backgroundImageSynchronousLoading;
2736             }
2737             set
2738             {
2739                 backgroundImageSynchronousLoading = value;
2740
2741                 string bgUrl = null;
2742                 var pValue = Background.Find(ImageVisualProperty.URL);
2743                 pValue?.Get(out bgUrl);
2744                 pValue?.Dispose();
2745
2746                 if (!string.IsNullOrEmpty(bgUrl))
2747                 {
2748                     PropertyMap bgMap = this.Background;
2749                     var temp = new PropertyValue(backgroundImageSynchronousLoading);
2750                     bgMap.Add("synchronousLoading", temp);
2751                     temp.Dispose();
2752                     Background = bgMap;
2753                 }
2754             }
2755         }
2756
2757         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
2758         [EditorBrowsable(EditorBrowsableState.Never)]
2759         public Vector2 UpdateSizeHint
2760         {
2761             get
2762             {
2763                 return (Vector2)GetValue(UpdateSizeHintProperty);
2764             }
2765             set
2766             {
2767                 SetValue(UpdateSizeHintProperty, value);
2768                 NotifyPropertyChanged();
2769             }
2770         }
2771
2772         /// <summary>
2773         /// Enable/Disable ControlState propagation for children.
2774         /// It is false by default.
2775         /// If the View needs to share ControlState with descendants, please set it true.
2776         /// Please note that, changing the value will also changes children's EnableControlStatePropagation value recursively.
2777         /// </summary>
2778         [EditorBrowsable(EditorBrowsableState.Never)]
2779         public bool EnableControlStatePropagation
2780         {
2781             get
2782             {
2783                 return (bool)GetValue(EnableControlStatePropagationProperty);
2784             }
2785             set
2786             {
2787                 SetValue(EnableControlStatePropagationProperty, value);
2788                 NotifyPropertyChanged();
2789             }
2790         }
2791
2792         private bool InternalEnableControlStatePropagation
2793         {
2794             get => themeData?.ControlStatePropagation ?? false;
2795             set
2796             {
2797                 if (InternalEnableControlStatePropagation == value) return;
2798
2799                 if (themeData == null) themeData = new ThemeData();
2800
2801                 themeData.ControlStatePropagation = value;
2802
2803                 foreach (View child in Children)
2804                 {
2805                     child.EnableControlStatePropagation = value;
2806                 }
2807             }
2808         }
2809
2810         /// <summary>
2811         /// By default, it is false in View, true in Control.
2812         /// Note that if the value is true, the View will be a touch receptor.
2813         /// </summary>
2814         [EditorBrowsable(EditorBrowsableState.Never)]
2815         public bool EnableControlState
2816         {
2817             get
2818             {
2819                 return (bool)GetValue(EnableControlStateProperty);
2820             }
2821             set
2822             {
2823                 SetValue(EnableControlStateProperty, value);
2824             }
2825         }
2826
2827         /// <summary>
2828         /// Whether the actor grab all touches even if touch leaves its boundary.
2829         /// </summary>
2830         /// <returns>true, if it grab all touch after start</returns>
2831         [EditorBrowsable(EditorBrowsableState.Never)]
2832         public bool GrabTouchAfterLeave
2833         {
2834             get
2835             {
2836                 return (bool)GetValue(GrabTouchAfterLeaveProperty);
2837             }
2838             set
2839             {
2840                 SetValue(GrabTouchAfterLeaveProperty, value);
2841             }
2842         }
2843
2844         private bool InternalGrabTouchAfterLeave
2845         {
2846             get
2847             {
2848                 bool temp = false;
2849                 var pValue = GetProperty(View.Property.CaptureAllTouchAfterStart);
2850                 pValue.Get(out temp);
2851                 pValue.Dispose();
2852                 return temp;
2853             }
2854             set
2855             {
2856                 var temp = new Tizen.NUI.PropertyValue(value);
2857                 SetProperty(View.Property.CaptureAllTouchAfterStart, temp);
2858                 temp.Dispose();
2859                 NotifyPropertyChanged();
2860             }
2861         }
2862
2863         /// <summary>
2864         /// Determines which blend equation will be used to render renderers of this actor.
2865         /// </summary>
2866         /// <returns>blend equation enum currently assigned</returns>
2867         /// This will be public opened in next tizen after ACR done. Before ACR, need to be hidden as inhouse API.
2868         [EditorBrowsable(EditorBrowsableState.Never)]
2869         public BlendEquationType BlendEquation
2870         {
2871             get
2872             {
2873                 return (BlendEquationType)GetValue(BlendEquationProperty);
2874             }
2875             set
2876             {
2877                 SetValue(BlendEquationProperty, value);
2878             }
2879         }
2880
2881         private BlendEquationType InternalBlendEquation
2882         {
2883             get
2884             {
2885                 int temp = 0;
2886                 var pValue = GetProperty(View.Property.BlendEquation);
2887                 pValue.Get(out temp);
2888                 pValue.Dispose();
2889                 return (BlendEquationType)temp;
2890             }
2891             set
2892             {
2893                 var temp = new Tizen.NUI.PropertyValue((int)value);
2894                 SetProperty(View.Property.BlendEquation, temp);
2895                 temp.Dispose();
2896                 NotifyPropertyChanged();
2897             }
2898         }
2899
2900         /// <summary>
2901         /// If the value is true, the View will change its style as the theme changes.
2902         /// The default value is false in normal case but it can be true when the NUIApplication is created with <see cref="NUIApplication.ThemeOptions.ThemeChangeSensitive"/>.
2903         /// </summary>
2904         /// <since_tizen> 9 </since_tizen>
2905         public bool ThemeChangeSensitive
2906         {
2907             get => (bool)GetValue(ThemeChangeSensitiveProperty);
2908             set => SetValue(ThemeChangeSensitiveProperty, value);
2909         }
2910
2911         /// <summary>
2912         /// Create Style, it is abstract function and must be override.
2913         /// </summary>
2914         [EditorBrowsable(EditorBrowsableState.Never)]
2915         protected virtual ViewStyle CreateViewStyle()
2916         {
2917             return new ViewStyle();
2918         }
2919
2920         /// <summary>
2921         /// Called after the View's ControlStates changed.
2922         /// </summary>
2923         /// <param name="controlStateChangedInfo">The information including state changed variables.</param>
2924         [EditorBrowsable(EditorBrowsableState.Never)]
2925         protected virtual void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
2926         {
2927         }
2928
2929         /// <summary>
2930         /// </summary>
2931         [EditorBrowsable(EditorBrowsableState.Never)]
2932         protected virtual void OnThemeChanged(object sender, ThemeChangedEventArgs e)
2933         {
2934             if (string.IsNullOrEmpty(styleName)) ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(GetType()));
2935             else ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(styleName));
2936         }
2937
2938         /// <summary>
2939         /// Apply style instance to the view.
2940         /// Basically it sets the bindable property to the value of the bindable property with same name in the style.
2941         /// </summary>
2942         /// <since_tizen> 9 </since_tizen>
2943         public virtual void ApplyStyle(ViewStyle viewStyle)
2944         {
2945             if (viewStyle == null || themeData?.viewStyle == viewStyle) return;
2946
2947             if (themeData == null) themeData = new ThemeData();
2948
2949             themeData.viewStyle = viewStyle;
2950
2951             if (viewStyle.DirtyProperties == null || viewStyle.DirtyProperties.Count == 0)
2952             {
2953                 // Nothing to apply
2954                 return;
2955             }
2956
2957             BindableProperty.GetBindablePropertysOfType(GetType(), out var bindablePropertyOfView);
2958
2959             if (bindablePropertyOfView == null)
2960             {
2961                 return;
2962             }
2963
2964             var dirtyStyleProperties = new BindableProperty[viewStyle.DirtyProperties.Count];
2965             viewStyle.DirtyProperties.CopyTo(dirtyStyleProperties);
2966
2967             foreach (var sourceProperty in dirtyStyleProperties)
2968             {
2969                 var sourceValue = viewStyle.GetValue(sourceProperty);
2970
2971                 if (sourceValue == null)
2972                 {
2973                     continue;
2974                 }
2975
2976                 bindablePropertyOfView.TryGetValue(sourceProperty.PropertyName, out var destinationProperty);
2977
2978                 if (destinationProperty != null)
2979                 {
2980                     SetValue(destinationProperty, sourceValue);
2981                 }
2982             }
2983         }
2984
2985         /// <summary>
2986         /// Get whether the View is culled or not.
2987         /// True means that the View is out of the view frustum.
2988         /// </summary>
2989         /// <remarks>
2990         /// Hidden-API (Inhouse-API).
2991         /// </remarks>
2992         [EditorBrowsable(EditorBrowsableState.Never)]
2993         public bool Culled
2994         {
2995             get
2996             {
2997                 bool temp = false;
2998                 var pValue = GetProperty(View.Property.Culled);
2999                 pValue.Get(out temp);
3000                 pValue.Dispose();
3001                 return temp;
3002             }
3003         }
3004
3005         /// <summary>
3006         /// Set or Get TransitionOptions for the page transition.
3007         /// This property is used to define how this view will be transitioned during Page switching.
3008         /// </summary>
3009         /// <since_tizen> 9 </since_tizen>
3010         public TransitionOptions TransitionOptions
3011         {
3012             get
3013             {
3014                 return GetValue(TransitionOptionsProperty) as TransitionOptions;
3015             }
3016             set
3017             {
3018                 SetValue(TransitionOptionsProperty, value);
3019                 NotifyPropertyChanged();
3020             }
3021         }
3022
3023         private TransitionOptions InternalTransitionOptions
3024         {
3025             set
3026             {
3027                 transitionOptions = value;
3028             }
3029             get
3030             {
3031                 return transitionOptions;
3032             }
3033         }
3034
3035         /// <summary>
3036         /// Gets or sets the status of whether the view should emit key event signals.
3037         /// If a View's DispatchKeyEvents is set to false, then it's children will not emit a key event signal either.
3038         /// </summary>
3039         [EditorBrowsable(EditorBrowsableState.Never)]
3040         public bool DispatchKeyEvents
3041         {
3042             get
3043             {
3044                 return (bool)GetValue(DispatchKeyEventsProperty);
3045             }
3046             set
3047             {
3048                 SetValue(DispatchKeyEventsProperty, value);
3049                 NotifyPropertyChanged();
3050             }
3051         }
3052
3053
3054
3055
3056     }
3057 }