Adding a ToolBar with commands (HTML)
[ This article is for Windows 8.x and Windows Phone 8.x developers writing Windows Runtime apps. If you’re developing for Windows 10, see the latest documentation ]
ToolBar is a simple control that addresses command scalability. It has an action area where commands are immediately available and an overflow area where commands are hidden but can be displayed upon request by the end user. The control supports adaptive behavior by allowing commands to dynamically move from the primary to the secondary area when space is limited. ToolBar is not constrained to a single location in an app but can be found in various places such as Splitview, Flyout and on canvas.
Note The following coding scenarios can be viewed in more detail on the Try WinJS website.
Create a ToolBar with commands added declaratively
Commands can be added to the ToolBar declaratively. In this scenario, ToolBar has four primary commands and two secondary commands.
<div class="basicToolbar" data-win-control="WinJS.UI.ToolBar">
<!-- Primary commands -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdEdit',
label:'edit',
section:'primary',
type:'button',
icon: 'edit',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdDelete',
label:'delete',
section:'primary',
type:'button',
icon: 'delete',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdFavorite',
label:'favorite',
section:'primary',
type:'toggle',
icon: 'favorite',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdOpenWith',
label:'open with',
section:'primary',
type:'button',
icon: 'openfile',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdDownload',
label:'download',
section:'primary',
type:'button',
icon: 'download',
onclick: Sample.outputCommand}"></button>
<!-- Secondary command -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdSettings',
label:'settings',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdShare',
label:'share',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
</div>
<div class="status"></div>
WinJS.Namespace.define("Sample", {
outputCommand: WinJS.UI.eventHandler(function (ev) {
var status = document.querySelector(".status");
var command = ev.currentTarget;
if (command.winControl) {
var label = command.winControl.label || command.winControl.icon || "button";
var section = command.winControl.section || "";
var msg = section + " command " + label + " was pressed";
status.textContent = msg;
}
})
});
WinJS.UI.processAll();
Specify the grouping and drop out order commands
Developers can specify the grouping and drop out order of commands to the overflow area that does not follow the visual RTL order. This is useful for when screen space is limited. The control drops out from the highest to the lowest value. By default, the commands drop out from right to left. But the default value for priority is undefined.
<div class="groupingToolbar" data-win-control="WinJS.UI.ToolBar">
<!-- Primary commands -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdEdit',
label:'edit',
section:'primary',
type:'button',
icon: 'edit',
priority:2,
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdDelete',
label:'delete',
section:'primary',
type:'button',
icon: 'delete',
priority:2,
onclick: Sample.outputCommand}"></button>
<hr data-win-control="WinJS.UI.Command" data-win-options="{type:'separator'}" />
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdFavorite',
label:'favorite',
section:'primary',
type:'toggle',
icon: 'favorite',
priority:3,
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdOpenWith',
label:'open with',
section:'primary',
type:'button',
icon: 'openfile',
priority:3,
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdDownload',
label:'download',
section:'primary',
type:'button',
icon: 'download',
priority:3,
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdPin',
label:'pin',
section:'primary',
type:'button',
icon: 'pin',
priority:3,
onclick: Sample.outputCommand}"></button>
<hr data-win-control="WinJS.UI.Command" data-win-options="{type:'separator'}" />
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdZoom',
label:'zoom',
section:'primary',
type:'button',
icon: 'zoomin',
priority:1,
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdFullscreen',
label:'full screen',
section:'primary',
type:'button',
icon: 'fullscreen',
priority:1,
onclick: Sample.outputCommand}"></button>
<!-- Secondary command -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdSettings',
label:'settings',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdShare',
label:'share',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
</div>
<div class="status"></div>
WinJS.Namespace.define("Sample", {
outputCommand: WinJS.UI.eventHandler(function (ev) {
var status = document.querySelector(".status");
var command = ev.currentTarget;
if (command.winControl) {
var label = command.winControl.label || command.winControl.icon || "button";
var section = command.winControl.section || "";
var priority = command.winControl.priority;
var msg = section + " command " + label + " with priority " + priority + " was pressed";
status.textContent = msg;
}
})
});
WinJS.UI.processAll();
Show multiple ToolBars at once
Developers can create multiple ToolBars and show them at once.
<div class="sampleToolBar" data-win-control="WinJS.UI.ToolBar">
<!-- Primary commands -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdEdit',
label:'edit',
section:'primary',
type:'button',
icon: 'edit',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdFavorite',
label:'favorite',
section:'primary',
type:'toggle',
icon: 'favorite',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdDelete',
label:'delete',
section:'primary',
type:'button',
icon: 'delete',
onclick: Sample.outputCommand}"></button>
<!-- Secondary commands -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdSettings',
label:'settings',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdShare',
label:'share',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
</div>
<div class="sampleToolBar2" data-win-control="WinJS.UI.ToolBar">
<!-- Primary commands -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdBold',
section:'primary',
type:'toggle',
icon: 'bold',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdItalic',
section:'primary',
type:'toggle',
icon: 'italic',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdUnderline',
section:'primary',
type:'toggle',
icon: 'underline',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdEmoticon',
section:'primary',
type:'button',
icon: 'emoji',
onclick: Sample.outputCommand}"></button>
<!-- Secondary commands -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdSettings',
label:'settings',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdShare',
label:'share',
section:'secondary',
type:'button',
onclick: Sample.outputCommand}"></button>
</div>
<div class="status"></div>
WinJS.Namespace.define("Sample", {
outputCommand: WinJS.UI.eventHandler(function (ev) {
var status = document.querySelector(".status");
var command = ev.currentTarget;
if (command.winControl) {
var label = command.winControl.label || command.winControl.icon || "button";
var section = command.winControl.section || "";
var msg = section + " command " + label + " was pressed";
status.textContent = msg;
}
})
});
WinJS.UI.processAll();
Create a ToolBar with commands added using WinJS.Binding.List
WinJS.Binding.List can be used to populate a ToolBar with commands via the ToolBar's data property.
<div class="imperativeToolBar" data-win-control="WinJS.UI.ToolBar"
data-win-options="{data: Sample.commandList}"></div>
<div class="status"></div>
WinJS.Namespace.define("Sample", {
commandList: null,
outputCommand: WinJS.UI.eventHandler(function (ev) {
var status = document.querySelector(".status");
var command = ev.currentTarget;
if (command.winControl) {
var label = command.winControl.label || command.winControl.icon || "button";
var section = command.winControl.section || "";
var msg = section + " command " + label + " was pressed";
status.textContent = msg;
}
})
});
var dataArray = [
new WinJS.UI.Command(null,
{ id: 'cmdEdit', label: 'edit', section: 'primary', type: 'button', icon: 'edit', onclick: Sample.outputCommand }),
new WinJS.UI.Command(null,
{ id: 'cmdDelete', label: 'delete', section: 'primary', type: 'button', icon: 'delete', onclick: Sample.outputCommand }),
new WinJS.UI.Command(null,
{ id: 'cmdFavorite', label: 'favorite', section: 'primary', type: 'toggle', icon: 'favorite',
onclick: Sample.outputCommand }),
new WinJS.UI.Command(null,
{ id: 'cmdOpenWith', label: 'open with', section: 'primary', type: 'button', icon: 'openfile',
onclick: Sample.outputCommand }),
new WinJS.UI.Command(null,
{ id: 'cmdDownload', label: 'download', section: 'primary', type: 'button', icon: 'download',
onclick: Sample.outputCommand }),
new WinJS.UI.Command(null,
{ id: 'cmdPin', label: 'pin', section: 'primary', type: 'button', icon: 'pin', onclick: Sample.outputCommand }),
new WinJS.UI.Command(null,
{ id: 'cmdZoom', label: 'zoom', section: 'primary', type: 'button', icon: 'zoomin', onclick: Sample.outputCommand }),
new WinJS.UI.Command(null,
{ id: 'cmdFullscreen', label: 'full screen', section: 'primary', type: 'button', icon: 'fullscreen',
onclick: Sample.outputCommand })
];
Sample.commandList = new WinJS.Binding.List(dataArray);
WinJS.UI.processAll();
Customize ToolBar
The default colors of the ToolBar are set by either the ui-dark.css or ui-light.css style sheets, depending on which style sheet is loaded. You may customize the colors of the ToolBar by overriding the appropriate CSS rules. In this example, the background color of the ToolBar is set to be transparent and the background color of the overflow area of the ToolBar is customized to match the background image behind it.
<div class="image">
<img src="/pages/toolbar/images/Sunset.jpg" alt="" />
<div data-win-control="WinJS.UI.ToolBar">
<!-- Primary commands -->
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdEdit',
label:'edit',
section:'primary',
type:'button',
icon: 'edit'}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdFavorite',
label:'favorite',
section:'primary',
type:'toggle',
icon: 'favorite'}"></button>
<button data-win-control="WinJS.UI.Command" data-win-options="{
id:'cmdDelete',
label:'delete',
section:'primary',
type:'button',
icon: 'delete'}"></button>
</div>
</div>
/* Add your CSS here */
body {
background-color: rgb(112,112,112);
}
#content {
text-align: center;
overflow: hidden;
}
.image {
position: relative;
margin: auto;
margin-top: 50px;
margin-bottom:50px;
}
img {
max-width: 100%;
}
.win-toolbar-actionarea {
background: transparent;
}
.win-toolbar-overflowarea {
background-color: rgb(74, 61, 78);
border: 0;
}
WinJS.UI.processAll();
Remarks
These and other coding samples can be viewed in more detail on the Try WinJS website. Play with the code and see the results immediately.