diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index a1551a6ca..7d201e7d8 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -61,10 +61,21 @@
-
-
-
-
+
+ action-items-text.xml
+
+
+ center-view-stack.xml
+
+
+ center-view-segmented.xml
+
+
+ center-view.xml
+
+
+ data-binding.xml
+
details-page.xml
@@ -83,10 +94,15 @@
main-page.xml
-
-
-
-
+
+ navigation-button.xml
+
+
+ action-items-icon.xml
+
+
+ page-title-icon.xml
+
list-picker.xml
@@ -172,6 +188,9 @@
+
+
+
bindingContext_testPage.xml
@@ -1728,7 +1747,7 @@
False
-
+
\ No newline at end of file
diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts
index b40bec212..a39c70c74 100644
--- a/apps/tests/testRunner.ts
+++ b/apps/tests/testRunner.ts
@@ -23,6 +23,7 @@ function isRunningOnEmulator(): boolean {
}
export var allTests = {};
+allTests["ACTION-BAR"] = require("./ui/action-bar/action-bar-tests");
allTests["XML-DECLARATION"] = require("./xml-declaration/xml-declaration-tests");
allTests["APPLICATION"] = require("./application-tests");
allTests["DOCKLAYOUT"] = require("./layouts/dock-layout-tests");
diff --git a/apps/tests/ui/action-bar/action-bar-tests-common.ts b/apps/tests/ui/action-bar/action-bar-tests-common.ts
new file mode 100644
index 000000000..953ed5522
--- /dev/null
+++ b/apps/tests/ui/action-bar/action-bar-tests-common.ts
@@ -0,0 +1,136 @@
+import TKUnit = require("../../TKUnit");
+import LabelModule = require("ui/label");
+import helper = require("../helper");
+import builder = require("ui/builder");
+import actionBar = require("ui/action-bar");
+import button = require("ui/button");
+import PageModule = require("ui/page");
+
+export function test_actionItem_inherit_bindingContext() {
+ var page: PageModule.Page;
+ var label: LabelModule.Label;
+ var context = { text: "item" };
+
+ var pageFactory = function (): PageModule.Page {
+ page = new PageModule.Page();
+ page.bindingContext = context;
+ var actionItem = new actionBar.ActionItem();
+
+ actionItem.bind({
+ sourceProperty: "text",
+ targetProperty: "text"
+ });
+
+ page.actionBar.actionItems.addItem(actionItem);
+
+ label = new LabelModule.Label();
+ label.text = "Text";
+ page.content = label;
+ return page;
+ };
+
+ helper.navigate(pageFactory);
+
+ try {
+ TKUnit.assertEqual(page.actionBar.actionItems.getItemAt(0).text, "item", "actionItem.text");
+ }
+ finally {
+ helper.goBack();
+ }
+}
+
+export function test_actionBar_inherit_bindingContext_inXML() {
+ var p = builder.parse(
+ " ");
+ p.bindingContext = { myProp: "success" };
+
+ TKUnit.assertEqual(p.actionBar.title, "success", "actionBar.title");
+};
+
+export function test_actionItem_inherit_bindingContext_inXML() {
+ var p = builder.parse(
+ " " +
+ "" +
+ " ");
+ p.bindingContext = { myProp: "success" };
+
+ var actionItem = p.actionBar.actionItems.getItemAt(0);
+
+ TKUnit.assertEqual(actionItem.text, "success", "actionItem.text");
+};
+
+export function test_navigationButton_inherit_bindingContext_inXML() {
+ var p = builder.parse(
+ " " +
+ "" +
+ " ");
+ p.bindingContext = { myProp: "success" };
+
+ var navButton = p.actionBar.navigationButton;
+ TKUnit.assertEqual(navButton.text, "success", "actionItem.text");
+};
+
+export function test_centerView_inherit_bindingContext_inXML() {
+ var p = builder.parse(
+ " " +
+ "" +
+ " ");
+ p.bindingContext = { myProp: "success" };
+
+ var centerBtn = p.actionBar.centerView;
+ TKUnit.assert(centerBtn instanceof button.Button, "cneterView not loaded correctly");
+ TKUnit.assertEqual(centerBtn.text, "success", "actionItem.text");
+};
+
+export function test_centerView_inXML() {
+ var p = builder.parse(
+ " " +
+ "" +
+ " ");
+
+ var centerBtn = p.actionBar.centerView;
+ TKUnit.assert(centerBtn instanceof button.Button, "cneterView not loaded correctly");
+};
+
+export function test_centerView_inXML_short_definition() {
+ var p = builder.parse(
+ " " +
+ "" +
+ " ");
+
+ var centerBtn = p.actionBar.centerView;
+ TKUnit.assert(centerBtn instanceof button.Button, "cneterView not loaded correctly");
+};
+
+export function test_Setting_ActionItems_doesnt_thrown() {
+
+ var page: PageModule.Page;
+ var label: LabelModule.Label;
+ var gotException = false;
+
+ var pageFactory = function (): PageModule.Page {
+ page = new PageModule.Page();
+ var actionItem = new actionBar.ActionItem();
+ actionItem.text = "Item";
+ page.actionBar.actionItems.addItem(actionItem);
+
+ label = new LabelModule.Label();
+ label.text = "Text";
+ page.content = label;
+ return page;
+ };
+
+ try {
+ helper.navigate(pageFactory);
+ }
+ catch (e) {
+ gotException = true;
+ }
+
+ try {
+ TKUnit.assert(!gotException, "Expected: false, Actual: " + gotException);
+ }
+ finally {
+ helper.goBack();
+ }
+}
diff --git a/apps/tests/ui/action-bar/action-bar-tests.android.ts b/apps/tests/ui/action-bar/action-bar-tests.android.ts
new file mode 100644
index 000000000..61f25bd5f
--- /dev/null
+++ b/apps/tests/ui/action-bar/action-bar-tests.android.ts
@@ -0,0 +1,4 @@
+import actionTestsCommon = require("./action-bar-tests-common");
+
+declare var exports;
+require("utils/module-merge").merge(actionTestsCommon, exports);
diff --git a/apps/tests/ui/action-bar/action-bar-tests.ios.ts b/apps/tests/ui/action-bar/action-bar-tests.ios.ts
new file mode 100644
index 000000000..142b747e9
--- /dev/null
+++ b/apps/tests/ui/action-bar/action-bar-tests.ios.ts
@@ -0,0 +1,84 @@
+import actionTestsCommon = require("./action-bar-tests-common");
+import PageModule = require("ui/page");
+import TKUnit = require("../../TKUnit");
+import LabelModule = require("ui/label");
+import helper = require("../helper");
+import view = require("ui/core/view");
+import actionBar = require("ui/action-bar");
+
+declare var exports;
+require("utils/module-merge").merge(actionTestsCommon, exports);
+
+export function test_NavBar_isVisible_when_MenuItems_areSet() {
+
+ var page: PageModule.Page;
+ var label: LabelModule.Label;
+ var navBarIsVisible = false;
+
+ var handler = function (data) {
+ page.off(PageModule.Page.navigatedToEvent, handler);
+ navBarIsVisible = (page.frame.ios).showNavigationBar;
+ }
+
+ var pageFactory = function (): PageModule.Page {
+ page = new PageModule.Page();
+ page.on(PageModule.Page.navigatedToEvent, handler);
+
+ var mi = new actionBar.ActionItem();
+ mi.text = "B";
+ page.actionBar.actionItems.addItem(mi);
+ label = new LabelModule.Label();
+ label.text = "Text";
+ page.content = label;
+ return page;
+ };
+
+ helper.navigate(pageFactory);
+
+ try {
+ TKUnit.assert(navBarIsVisible, "Expected: true, Actual: " + navBarIsVisible);
+ }
+ finally {
+ page.off(view.View.loadedEvent, handler);
+ helper.goBack();
+ }
+}
+
+export function test_NavBarItemsAreClearedFromNativeWhenClearedFromNativeScript() {
+ var page: PageModule.Page;
+ var label: LabelModule.Label;
+
+ var handler = function (data) {
+ page.off(PageModule.Page.navigatedToEvent, handler);
+ var menuItems = page.actionBar.actionItems.getItems();
+ var i;
+ for (i = menuItems.length - 1; i >= 0; i--) {
+ page.actionBar.actionItems.removeItem(menuItems[i]);
+ }
+ }
+
+ var pageFactory = function (): PageModule.Page {
+ page = new PageModule.Page();
+ page.on(PageModule.Page.navigatedToEvent, handler);
+
+ var mi = new actionBar.ActionItem();
+ mi.text = "B";
+ page.actionBar.actionItems.addItem(mi);
+ label = new LabelModule.Label();
+ label.text = "Text";
+ page.content = label;
+ return page;
+ };
+
+ helper.navigate(pageFactory);
+
+ try {
+ var navigationItem: UINavigationItem = ((page.ios).navigationItem);
+ var rightBarButtonItemsCount = navigationItem.rightBarButtonItems ? navigationItem.rightBarButtonItems.count : 0;
+ TKUnit.assertEqual(rightBarButtonItemsCount, 0, "After remove all items native items should be 0.");
+ }
+ finally {
+ page.off(view.View.loadedEvent, handler);
+ helper.goBack();
+ }
+}
\ No newline at end of file
diff --git a/apps/tests/ui/helper.ts b/apps/tests/ui/helper.ts
index 596f61f52..0932c0bff 100644
--- a/apps/tests/ui/helper.ts
+++ b/apps/tests/ui/helper.ts
@@ -7,7 +7,7 @@ import TKUnit = require("../TKUnit");
import utils = require("utils/utils");
import types = require("utils/types");
import styling = require("ui/styling");
-import platform = require("platform");
+import platform = require("platform");
var DELTA = 0.1;
@@ -25,7 +25,7 @@ export function do_PageTest(test: (views: Array) => void, content: vi
navigate(pageFactory);
try {
- test([newPage, content, secondView, thirdView]);
+ test([newPage, content, secondView, thirdView, newPage.actionBar]);
}
finally {
goBack();
@@ -45,7 +45,7 @@ export function do_PageTest_WithButton(test: (views: Array) => void)
navigate(pageFactory);
try {
- test([newPage, btn]);
+ test([newPage, btn, newPage.actionBar]);
}
finally {
goBack();
@@ -69,7 +69,7 @@ export function do_PageTest_WithStackLayout_AndButton(test: (views: Array(createFunc: (
}
}
-export function navigate(pageFactory: () => page.Page, navigationContext?: any) {
+export function navigate(pageFactory: () => page.Page, navigationContext?: any) {
var currentPage = frame.topmost().currentPage;
frame.topmost().navigate({ create: pageFactory, animated: false, context: navigationContext });
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage !== currentPage; });
diff --git a/apps/tests/ui/page/page-tests-common.ts b/apps/tests/ui/page/page-tests-common.ts
index b65db608b..61f30d9f3 100644
--- a/apps/tests/ui/page/page-tests-common.ts
+++ b/apps/tests/ui/page/page-tests-common.ts
@@ -27,8 +27,6 @@ import LabelModule = require("ui/label");
import stackLayoutModule = require("ui/layouts/stack-layout");
import helper = require("../helper");
import view = require("ui/core/view");
-import builder = require("ui/builder");
-import actionBar = require("ui/action-bar");
export function addLabelToPage(page: PageModule.Page, text?: string) {
var label = new LabelModule.Label();
@@ -36,82 +34,6 @@ export function addLabelToPage(page: PageModule.Page, text?: string) {
page.content = label;
}
-export function test_menuItem_inherit_bindingContext() {
-
- var page: PageModule.Page;
- var label: LabelModule.Label;
- var context = { text: "item" };
-
- var pageFactory = function (): PageModule.Page {
- page = new PageModule.Page();
- page.bindingContext = context;
- var menuItem = new actionBar.ActionItem();
-
- menuItem.bind({
- sourceProperty: "text",
- targetProperty: "text"
- });
-
- page.actionBar.actionItems.addItem(menuItem);
-
- label = new LabelModule.Label();
- label.text = "Text";
- page.content = label;
- return page;
- };
-
- helper.navigate(pageFactory);
-
- try {
- TKUnit.assertEqual(page.actionBar.actionItems.getItemAt(0).text, "item", "menuItem.text should equal to 'item'");
- }
- finally {
- helper.goBack();
- }
-}
-
-export function test_menuItem_inherit_bindingContext_inXML() {
- var p = builder.parse("");
- p.bindingContext = { myProp: "success" };
-
- var menuItem = p.actionBar.actionItems.getItemAt(0);
-
- TKUnit.assertEqual(menuItem.text, "success", "menuItem.text");
-};
-
-export function test_Setting_ActionItems_doesnt_thrown() {
-
- var page: PageModule.Page;
- var label: LabelModule.Label;
- var gotException = false;
-
- var pageFactory = function (): PageModule.Page {
- page = new PageModule.Page();
- var menuItem = new actionBar.ActionItem();
- menuItem.text = "Item";
- page.actionBar.actionItems.addItem(menuItem);
-
- label = new LabelModule.Label();
- label.text = "Text";
- page.content = label;
- return page;
- };
-
- try {
- helper.navigate(pageFactory);
- }
- catch (e) {
- gotException = true;
- }
-
- try {
- TKUnit.assert(!gotException, "Expected: false, Actual: " + gotException);
- }
- finally {
- helper.goBack();
- }
-}
-
export function test_AfterPageLoaded_is_called_NativeInstance_is_created() {
var page: PageModule.Page;
diff --git a/apps/tests/ui/page/page-tests.ios.ts b/apps/tests/ui/page/page-tests.ios.ts
index cc56b7937..0a74ea139 100644
--- a/apps/tests/ui/page/page-tests.ios.ts
+++ b/apps/tests/ui/page/page-tests.ios.ts
@@ -3,8 +3,6 @@ import PageModule = require("ui/page");
import TKUnit = require("../../TKUnit");
import LabelModule = require("ui/label");
import helper = require("../helper");
-import view = require("ui/core/view");
-import actionBar = require("ui/action-bar");
declare var exports;
require("utils/module-merge").merge(PageTestCommon, exports);
@@ -26,77 +24,3 @@ export function test_NavigateToNewPage_InnerControl() {
TKUnit.assert(label.android === undefined, "InnerControl.android should be undefined after navigate back.");
TKUnit.assert(label.isLoaded === false, "InnerControl.isLoaded should become false after navigating back");
}
-
-export function test_NavBar_isVisible_when_MenuItems_areSet() {
-
- var page: PageModule.Page;
- var label: LabelModule.Label;
- var navBarIsVisible = false;
-
- var handler = function (data) {
- page.off(PageModule.Page.navigatedToEvent, handler);
- navBarIsVisible = (page.frame.ios).showNavigationBar;
- }
-
- var pageFactory = function (): PageModule.Page {
- page = new PageModule.Page();
- page.on(PageModule.Page.navigatedToEvent, handler);
-
- var mi = new actionBar.ActionItem();
- mi.text = "B";
- page.actionBar.actionItems.addItem(mi);
- label = new LabelModule.Label();
- label.text = "Text";
- page.content = label;
- return page;
- };
-
- helper.navigate(pageFactory);
-
- try {
- TKUnit.assert(navBarIsVisible, "Expected: true, Actual: " + navBarIsVisible);
- }
- finally {
- page.off(view.View.loadedEvent, handler);
- helper.goBack();
- }
-}
-
-export function test_NavBarItemsAreClearedFromNativeWhenClearedFromNativeScript() {
- var page: PageModule.Page;
- var label: LabelModule.Label;
-
- var handler = function (data) {
- page.off(PageModule.Page.navigatedToEvent, handler);
- var menuItems = page.actionBar.actionItems.getItems();
- var i;
- for (i = menuItems.length - 1; i >= 0; i--) {
- page.actionBar.actionItems.removeItem(menuItems[i]);
- }
- }
-
- var pageFactory = function (): PageModule.Page {
- page = new PageModule.Page();
- page.on(PageModule.Page.navigatedToEvent, handler);
-
- var mi = new actionBar.ActionItem();
- mi.text = "B";
- page.actionBar.actionItems.addItem(mi);
- label = new LabelModule.Label();
- label.text = "Text";
- page.content = label;
- return page;
- };
-
- helper.navigate(pageFactory);
-
- try {
- var navigationItem: UINavigationItem = ((page.ios).navigationItem);
- var rightBarButtonItemsCount = navigationItem.rightBarButtonItems ? navigationItem.rightBarButtonItems.count : 0;
- TKUnit.assertEqual(rightBarButtonItemsCount, 0, "After remove all items native items should be 0.");
- }
- finally {
- page.off(view.View.loadedEvent, handler);
- helper.goBack();
- }
-}
\ No newline at end of file
diff --git a/apps/tests/ui/view/view-tests-common.ts b/apps/tests/ui/view/view-tests-common.ts
index c64788a8f..5cbf31f46 100644
--- a/apps/tests/ui/view/view-tests-common.ts
+++ b/apps/tests/ui/view/view-tests-common.ts
@@ -27,7 +27,8 @@ export var test_eachDescendant = function () {
}
viewModule.eachDescendant(frame.topmost(), callback);
- TKUnit.assert(counter === 2);
+ // Descendants: page, actionBar, button
+ TKUnit.assertEqual(counter, 3, "descendants");
}
helper.do_PageTest_WithButton(test);
diff --git a/apps/tests/ui/view/view-tests.android.ts b/apps/tests/ui/view/view-tests.android.ts
index 396b1d31a..5a26a2757 100644
--- a/apps/tests/ui/view/view-tests.android.ts
+++ b/apps/tests/ui/view/view-tests.android.ts
@@ -21,7 +21,8 @@ export var test_event_onAttached_IsRaised = function () {
trace.addEventListener(listener);
var test = function (views: Array) {
- TKUnit.assertEqual(listener.receivedEvents.length, views.length, "onAttached calls");
+ // 4 onAttached calls: page, stack, button, actionBar
+ TKUnit.assertEqual(listener.receivedEvents.length, 4, "onAttached calls");
var i;
for (i = 0; i < listener.receivedEvents.length; i++) {
@@ -58,7 +59,8 @@ export var test_event_onContextChanged_IsRaised_WhenAttached = function () {
trace.addEventListener(listener);
var test = function (views: Array) {
- TKUnit.assertEqual(listener.receivedEvents.length, views.length, "onContextChanged calls");
+ // 4 onContextChanged calls: page, stack, button, actionBar
+ TKUnit.assertEqual(listener.receivedEvents.length, 4, "onContextChanged calls");
var i;
for (i = 0; i < listener.receivedEvents.length; i++) {
@@ -91,7 +93,7 @@ export var test_event_onContextChanged_IsRaised_WhenAttached_Dynamically = funct
}
export var test_event_onDetached_IsRaised = function () {
- var cachedViews;
+ var cachedViews: Array;
var listener: Listener;
var test = function (views: Array) {
@@ -104,13 +106,18 @@ export var test_event_onDetached_IsRaised = function () {
helper.do_PageTest_WithStackLayout_AndButton(test);
- TKUnit.assertEqual(listener.receivedEvents.length, cachedViews.length, "onDetached calls");
+ // 4 detached calls: page, stack, button, actionBar
+ TKUnit.assertEqual(listener.receivedEvents.length, 4, "onDetached calls");
var i
var j;
// _onDetached event is propagated to nested children first
- for (i = 0, j = listener.receivedEvents.length - 1; i < listener.receivedEvents.length; i++, j--) {
- TKUnit.assertEqual(listener.receivedEvents[i].sender, cachedViews[j]);
+ for (i = 0, j = listener.receivedEvents.length - 1; i < listener.receivedEvents.length; i++ , j--) {
+ // check the sender and remove
+ var index = cachedViews.indexOf(listener.receivedEvents[i].sender);
+ TKUnit.assert(index >= 0, "_onDetached called for unknown sender");
+ cachedViews.splice(index, 1);
+
TKUnit.assertEqual(listener.receivedEvents[i].name, "_onDetached");
}
@@ -146,14 +153,14 @@ export var test_events_onDetachedAndRemovedFromNativeVisualTree_AreRaised_WhenNa
};
var assert = function (views: Array) {
- // one for the Button, one for the StackLayout and one for the Page.
-
- TKUnit.assertEqual(onDetachedListener.receivedEvents.length, 3, "onDetached calls");
+ // 4 onDetached calls: page, stack, button, actionBar
+ TKUnit.assertEqual(onDetachedListener.receivedEvents.length, 4, "onDetached calls");
TKUnit.assertEqual(onDetachedListener.receivedEvents[0].name, "_onDetached");
- TKUnit.assertEqual(onDetachedListener.receivedEvents[0].sender, views[2]);
- TKUnit.assertEqual(onDetachedListener.receivedEvents[1].sender, views[1]);
- TKUnit.assertEqual(onDetachedListener.receivedEvents[2].sender, views[0]);
+ TKUnit.assertEqual(onDetachedListener.receivedEvents[0].sender, views[2]); // Button
+ TKUnit.assertEqual(onDetachedListener.receivedEvents[1].sender, views[1]); // Stack
+ TKUnit.assertEqual(onDetachedListener.receivedEvents[2].sender, views[3]); // ActionBar
+ TKUnit.assertEqual(onDetachedListener.receivedEvents[3].sender, views[0]); // Page
// this is an event fired from CustomLayoutView when a child is removed from the native visual tree
// therefore this event is fired for StackLayout and Button (which is inside StackLayout).
@@ -233,7 +240,7 @@ export var test_StylePropertiesDefaultValuesCache = function () {
var defaultLabelFontSize = ((testLabel.android)).getTextSize();
var defaultButtonFontSize = ((testButton.android)).getTextSize();
-
+
testLabel.style.fontSize = testValue;
testButton.style.fontSize = testValue;
@@ -248,7 +255,7 @@ export var test_StylePropertiesDefaultValuesCache = function () {
actualLabelTextSize = ((testLabel.android)).getTextSize();
actualButtonTextSize = ((testButton.android)).getTextSize();
-
+
TKUnit.assert(actualLabelTextSize === defaultLabelFontSize, "Label text size should be default!");
TKUnit.assert(actualButtonTextSize === defaultButtonFontSize, "Button text size should be default!");
};
diff --git a/ui/action-bar/action-bar-common.ts b/ui/action-bar/action-bar-common.ts
index 5eb977737..a4ff40b97 100644
--- a/ui/action-bar/action-bar-common.ts
+++ b/ui/action-bar/action-bar-common.ts
@@ -93,13 +93,13 @@ export class ActionBar extends view.View implements dts.ActionBar {
}
this._centerView = value;
-
+
if (this._centerView) {
this._centerView.style._setValue(style.horizontalAlignmentProperty, enums.HorizontalAlignment.center, observable.ValueSource.Inherited);
this._centerView.style._setValue(style.verticalAlignmentProperty, enums.VerticalAlignment.center, observable.ValueSource.Inherited);
this._addView(this._centerView);
}
-
+
this.updateActionBar();
}
}
@@ -288,11 +288,23 @@ export class ActionItemBase extends bindable.Bindable implements dts.ActionItemB
this._setValue(ActionItemBase.iconProperty, value);
}
+ private _actionBar: ActionBar;
+ get actionBar(): ActionBar {
+ return this._actionBar;
+ }
+ set actionBar(value: ActionBar) {
+ if (value !== this._actionBar) {
+ this._actionBar = value;
+ if (this._actionBar) {
+ this.bindingContext = this._actionBar.bindingContext;
+ }
+ }
+ }
+
public _raiseTap() {
this._emit(ActionItem.tapEvent);
}
- actionBar: ActionBar;
}
export class ActionItem extends ActionItemBase {
diff --git a/ui/action-bar/action-bar.d.ts b/ui/action-bar/action-bar.d.ts
index 4745d7ca4..a9f41e46b 100644
--- a/ui/action-bar/action-bar.d.ts
+++ b/ui/action-bar/action-bar.d.ts
@@ -4,8 +4,7 @@
import dependencyObservable = require("ui/core/dependency-observable");
import bindable = require("ui/core/bindable");
import pages = require("ui/page");
- import contentView = require("ui/content-view");
-
+
export class ActionBar extends view.View implements view.AddArrayFromBuilder, view.AddChildFromBuilder {
title: string;
icon: string;
@@ -21,7 +20,7 @@
updateActionBar();
- //@private
+ //@private
_updateAndroidActionBar(menu: android.view.IMenu);
_onAndroidItemSelected(itemId: number): boolean
diff --git a/ui/page/page-common.ts b/ui/page/page-common.ts
index 4a53bd854..559f58f31 100644
--- a/ui/page/page-common.ts
+++ b/ui/page/page-common.ts
@@ -92,9 +92,11 @@ export class Page extends contentView.ContentView implements dts.Page {
if (this._actionBar !== value) {
if (this._actionBar) {
this._actionBar.page = undefined;
+ this._removeView(this._actionBar);
}
this._actionBar = value;
this._actionBar.page = this;
+ this._addView(this._actionBar);
}
}
@@ -124,7 +126,7 @@ export class Page extends contentView.ContentView implements dts.Page {
cssFileName = fs.path.join(fs.knownFolders.currentApp().path, cssFileName.replace("~/", ""));
}
if (!this._cssFiles[cssFileName]) {
- if (fs.File.exists(cssFileName)) {
+ if (fs.File.exists(cssFileName)) {
new fileSystemAccess.FileSystemAccess().readText(cssFileName, r => {
this._addCssInternal(r, cssFileName);
this._cssFiles[cssFileName] = true;
@@ -248,4 +250,13 @@ export class Page extends contentView.ContentView implements dts.Page {
resetCssValuesFunc(this);
view.eachDescendant(this, resetCssValuesFunc);
}
+
+ public _addViewToNativeVisualTree(view: view.View): boolean {
+ // ActionBar is added to the native visual tree by default
+ if (view === this.actionBar) {
+ return true;
+ }
+
+ return super._addViewToNativeVisualTree(view);
+ }
}
\ No newline at end of file