What's new for Windows UX developers: WinUI XAML and Fluent - BRK2108
New for Windows UX developers, I thought, I'd kick things off since it's four o'clock with just a fun video from our design team that gets. Us all a little riled up and then we'll get into a lot of good meaty stuff today so let's. Start. With a fun video, at, four o'clock. It's. Literally did just play. Wow. Well. In that case let's not start with that video. And. Let's just go right into our content. So this. Is what's new for Windows UX developers. Zamel. Fluent. Design and something. New called when you are I'm gonna be talking about today just, to give me a sense of who's around here how, many of you are building, UIs, with UWP zamel, with modern zamel today any. Folks there alright good a good number of folks anyone. Here using, WPF. Alright. WinForms. Anyone, some, WinForms folks okay good amount of wind form strokes anyone. Using like MFC, or, anything like that oh oh, yeah. Okay. Some of theirs see folks, well. Hopefully the, content, today will be relevant for all of you because. This is really about what's new for Windows UX developers, and it's the new innovations, we're doing in the platform, but a lot of what's been going on is about bridging that kind of modern YouTube EP platform, UX technologies, with, the traditional, win32, desktop technologies so that really all developers can start to take advantage of this whether, you're already on you, know on your uwp journey or if you're still earlier, in your development, I'm Paul, Gus Moreno and one of the lead PM's and the UX platform team, I've been Microsoft, for 16 years working, on UX. And platform technologies, and trying to bring Microsoft's, left and right brains together. So. I'm excited to get to show, some the stuff today I'm, going to start with a little bit of kind. Of the big picture just to catch people up on that and then most of the time today will be spent doing a lap around all the new features and what's new I'm. Gonna talk about the, windows UI library. It's just a new way for, us to to bring new features and to collaborate together on them with you then. I'm going to talk about a bunch of the new features in in the UX live in the UI library, in the platform itself a lot, of improvements, we're doing around the fundamentals, of UI to help you make apps, are just fundamentally, better a lot. Of improvements, and controls and patterns, and, a bunch, of improvements from developer productivity as well to make you more productive and efficient developing, your apps and then we'll wrap up and take some QA sound, good, all.
Right, So. You. Know the big picture just to kind of step, back, you. Know in our disappointment, not having a cool video. We, can, just. Imagine where they, are in Visual Studio maybe, you're in the design or maybe you're in the code editor part, and you've, got to start your project you've, got to create this new page of your app and, good. UX goes here and. You. Know UX, is where art and science come, together and you have to connect, the dots between tough technical problems, how, do i architect, this view model how do i a great these data sources together how do i keep. This operation from blocking the UI thread and nuanced. Experiential, questions, will. Customers, find this experience, easy to use does. It help them get the job done well do, they like it is, it inclusive, and accessible and building. Good UX is hard because it has, to do with combining, these things it's not just writing the code but figuring out what, to write and how to design that app and. It's, especially hard when you're trying to build powerful applications. With, a lot of functionality, for use there's a lot of things they can do and, give, them all that power while, also keeping it simple and, intuitive and, cohesive. For them and I, saw a few people chuckling. In the audience and we can all laugh at this but this pretty much represents, the state of the art of UX design back, in 2000. And. The. State of the art advances, and users. Expectations. Advance along with that and. That's. Not just for consumer, applications but, for business applications and, enterprise, applications, as well and, how. Can your experience, be, more dynamic in not. So static calc unit because, it all the time to the cloud, how. Can it be responsive. To users and the differ census, they're using different ways they want to interact with it and get things done, how, can it contextually, present the right things at just the right time using, artificial, intelligence maybe, to to, help people really, kind.
Of Be more productive and get more done and and. But, we know it's not easy to go from here. Where you may be today to where, you want to go with your experience, and so that's, really what we're focused on I'm helping you do with the innovations, that we're bringing. Forward and, I'm really covering a bunch of improvements in the UX windows UX platform itself, both. New capabilities, were enabling as well as some, old things that you'll look at you'll say gosh I remember that Paul from a long time ago and now you're bringing it back but we're trying to you. Know glue things together fill, gaps to, make that journey for everybody easy, to take advantage of great new things and keep adding great new things but also fill gaps and bridge technologies, to make it easier for you to get there so I'm going to talk, about that I'll, be talking about the fluent design system, this is Microsoft's, design, system, that, comes through in our products, and our platforms, and the. Windows. UX platform is one platform that has fluent, in it but others do. As well and I'll talk about how we're advancing that in this, context, how, its evolving to meet the needs of rich desktop. Applications. And. How we're making easier to express your own brand using. Fluent and then, I'm gonna talk about the windows UI library, and how this is going to help you take advantage of new UX. Platform, and in fluent design today, soon. Or in a more agile and quicker way and. Really this. Is also just sort of about a new open way that we're trying to work with all of you and empower all of you more directly and more in kind, of more agility so. We. Hope that you'll see that you know together the improvements you're really trying to create a comprehensive, solution for building experiences, and some of them you can start with today even, when you get back to your hotel rooms, or your. Planes or wherever. So. That's, the big picture so let's go look at a bunch of things and we'll start. With. Just, some, apps. That I that, I want to show you so how many people have seen the sam'l controls gallery. Focusing. That some some people have this, is a sample we have it's up in the stores also up on github and, this really shows off all the individual features. We have in the platform, and so if you go here, you can see all these kind of things tag new or all these new features. That were just, releasing. Now and. There's. A bunch of samples have been updated, also some things in preview you, can go to all and you can literally see all the different you know controls, and features the platform has and they're, really pretty good samples and so if you open one up like this tree view sample little it's not just here's, this control but really shows you a bunch of scenarios how did you drag-and-drop how. To do multi selection, how to do data, binding how. To have custom item templates, and so forth and so you'll, find that every sample really shows you a whole bunch of use cases and so it's a really great app. And I'll be using this today is in, a bunch of my demos because, it's something that you'll also have access to to go download the source code go download the app and play with today, but, the crating great experience isn't just about all the pieces it's how you put them together and so a second, demo I'm going to show you today is the we called the Van Arsdale app and this is a hypothetical.
This. Is a sample app we've built its end to end shows off the latest features of the platform in a fluent design and, it's, an app for managing. Your smart lights at home from this hypothetical Van Arsdale company. And also buying new, ones but you can imagine this actually applying to other device. Scenarios, IOT scenarios, where there were there things you have to manage and, you can kind of almost use this as a template to help you there and so in the app I, can, you, know pen around the lights I have in my rooms I can select different lights I can, select you know all the lights in my living room and I can put, them into PartyLite mode or sleep light or make them you know brighter or darker or whatever I. Can. Also. Shop, for new apps new, lights and. So, there's a kind of integrated shopping, experience. And. I can go create in, a new lamp and customize, it and purchase, it here, in the app you'll. See that this. Is showing off, there's. A bunch of animations, you've seen as I've been moving through here so using, a lot of the new animation capabilities it's. Also using the new navigation, bar on top capability. That. You see here and. And. Then, once. You bought those other lamps you can also manage them here in the app and so I can go and I can right-click on this lamp. And move it to another room, but. It works with different inputs and so I'm using my keyboard now to arrow up and down I can use the keyboard and I can do ctrl a and select all the lamps in my house, I can. Also use touch gestures so, I could swipe, to. Get to like a swipe command to remove that lamp for example or swipe this other way to rename the lamp and. I, can go and add them to add new rooms and there's, a whole list of rooms or I can create new rooms the, solarium. If I want and go, and define that with an editable combo box there so. Anyway. This is a second app we'll be using and it's also going to be available as a sample for you actually it's available starting today as a sample for you, this. App, here I'm not gonna use too much but this is actually the back end version of the app is also another sample, that you can use that shows off how. To take advantage of the platform to build, UI. That's maybe more conventional, kind of enterprise app UI so. This is kind of you know managing the products, that, that show open that other app and going. In detail and editing, them and it makes use of multiple windows and, other kinds of features you want and it's a great sample that shows a lot of the architecture behind how, you might want a structure, structure, your app architecture, to connect to data sources and do this kind of stuff and so. That's. A third sample that we'll be using today but, I think across these you can start to see a lot of the richness that we've got in the platform, some. Of the new capabilities and how, you start to put them together so. Let's, go into into, all those new, things and the first, one I want to talk about is the windows UI library, what. Is the what is the windows UI library, well, it's basically a way to get many of the latest ux, platform features in the library you can use today this, is something we announced it build and it's. Now been, shipping in preview. Since July. And. It gives you up-to-date fluent, controls, and styles. These. Are the same high quality implementations. As in the platform, itself no, explain, what that means, it's. Delivered as a new get, via. New get with side-by-side versioning, model so you get to be in control yourself, about which versions they're using and what features you're taking advantage of and it's, supported, all the way down in win 10 16:07, the anniversary, update knob so that's every, OS release we've done since 2016. So I said it's the same flute platform controls just different packaging, what, do I mean by that so one, of the new controls that I'll show you new, quote-unquote, controls I'll show you that we have is a menu bar and. The, way you can think about it is that same exact menu bar we're, putting both into the platform and also, into the windows UI library, and so you can pick which, instance, of it you're using which one you're creating and, they're the same as that control just they're different namespaces so, so.
The Windows namespace, if you're calling a platform version if you've linked to the windows UI library, then, you can call the Microsoft. Version. Of it and. The, benefit of that of course is then you can use it in, market, on the current OS you have you have to wait for your customers, to get on the latest OS that has that now. Going, to that it's delivered be a new get how. Many people here are familiar the new getting views and you get packages, before ok, so most, of you for people who aren't it's a package delivery, mechanism. That allows. You to kind of reuse modules, of code and. We've. Published already three updates to win UI and. Since July, as I mentioned and these are all kind of pre-release, versions, and. Soon we'll have the official kind. Of first, release version coming. Out and what. The difference is between the pre-release versions, is the, they, include preview api's and under development features so there might be some bugs in there because you're it's kind of like being an insider on when you I sorta like the windows insider program you're getting bits, as they're under development. And. The, final version will be can the stable supported release preview, API has been removed from it and you can kind of you, know bet on it. You. Can still upload stuff to the store with the preview releases if you want you're. In control of that just, be aware that it's, a preview release. Once. That's out the. Chain, will continue they'll be more preview releases of the next version and then, ultimately a final release of that one and so on and so forth and use, a developer, are picking. Which one you're targeting so you're targeting to Oh at. Some point in the future you might say hey there's new features and new styles and things I want three oh and then you'll go and you'll activate argot your app to 302. Go get those it, doesn't matter which OS version you're running on really it's you picking, which, new get packaged version you're using that makes sense, alright, and. So why you'd want to do that of course is amongst, other reasons to get, something that's supported all the way down on the anniversary update and. On up there. Have been I think. Seven releases, of Windows 10, since, its first come out and. When we put, things into the platform such, as new features were putting into the 1809, platform, that's coming out this next, month, they're. Only available to you they're things, that your. Customer has to be using that OS version be able to use that feature, things. We put in when you eye your. Customers, can take advantage of even, if you're running your app all the way down in 1607, so we think that should really help folks. Start. Using new features sooner, starting, them integrate into their apps and take advantage of them without having to wait for your organization, while still rolling, out new Windows updates. And. I think let's, do a little demo of that. Hopefully. All. Right so, here, what, I've got going on here is this. Is that, sample gallery app that. I was just showing you but. Here I'm actually running it I'm. Going to use win ver to. Pull. Myself accountable here I'm actually running it not on the. Upcoming version of Windows 1809, I'm running it on 1803, the one that came out last March this past March but. Yet I'm using new features so the drop down button is one of the new features that we've added to.
The Platform and yet here it is working. What's, going on there this app is using when, you I the control, gallery sample is using when you I and so therefore those, new features are actually there and working the api's are available for you to use on our s4 so, let's go look at the code and understand what's going on there, so. Here's the sample so. One of the things I've done and pardon, my references have kind of gotten blown up here but if you scroll down eventually, you'll. See there's, the Microsoft, dot, you i dot sam'l, nougat, package the winuae nougat package those telling you about it's, been linked as a reference, here if you've never done that before what you do is you can kind of right click and say manage NuGet packages. And. There you can kind of go search for either when you I. Or you can search for Microsoft, at you at sam'l however you want to find it and, if. My internet. Connection, we're working better you would see that it found it and you'd click on it and add it and. You have to make sure to check the include, preview, packages, pre-release, flag because it's currently in pre-release so if you're not finding it that's, why. And. So as, soon as you've done that all of a sudden your app now has access to call all these api's that are in when you I and all these features that are there and there's probably two big things you want to do you want to first. You want to apply the latest styles, to all the controls that gets you the latest styling. And kind of look and feel to everything and, the way you do that is just go to your application, and. You. Just merge, in the. Microsoft. That you add adds Amal controls and what controls resources, okay, and that, all the sudden means instead, of using the generic sam'l, styles. That are on that OS version, you just are pointing the ones in the window I package and you're getting the newest styling across your app and. I'll show you some of the reasons you want to get that such as better UI density, amongst other reasons and. Then, to use controls, if you're using all code behind you call the Microsoft. Version. Of the namespace, to get to it but if you're using markup here's how you do that. You. Go and you and you define, the name space you want to use. Microsoft. You IMO controls and you give it some name so I'm going to call, mucks controls here and, then in your markup you. Do. Mucks controls pull. In the API so ordinarily you would have done drop-down, button in your zamel markup so call the platform version and this is the way you can call that version from when you I in, your. But. All the other features like intellisense, and so forth works if I had gone. And started typing you, know I can see other features that are there color picker and drop-down button and so forth and so. It's. Kind of you know that's simple those are the two sort of steps you do to then start be able to use when UI in. Your application. So. Yeah and we welcome you. Know you guys should go try it out it's available available, now and a. Lot of things I'll show you today of the new innovations and features are available in when UI so you can start to search use them sooner so, let's get into those and let's start with some of the improvements we're doing around here X fundamentals, and the, first area we've been we've been doing work on is around UI density, we've, heard a lot of feedback about UI density, from people they've said oh my goodness your Metro UI density, is so so, loosey goosey and big can't, you guys tighten it up and. Indeed. We have done so so this, is the old kind of default so if you're running you. Know any Windows 10, build before. 1809. This new one is about to come out or if you're running Windows 8 or anything like that this, is the kind of UI density, you get by default, this. Is the new kind of UI density you get by default and so you'll see that a. Lot, of things like toolbars are 20 percent tighter, margins. Have been reduced on on headers, so forms and things get tighter there are 50 percent tighter, there, padding's. And margins, on things like trees and lists and things have been tightened up to fit forty percent more items font. Size has been tuned slightly, to, have a kind of better feeling, of density, there and. This is just kind of for. Free basically, just. Retarget, your app to, take. Eventually the win UI styles, and this, is kind of the Neuse basin you, get by default but, we've also made it easier to go even denser and so, some, people want even more compact, sizing, they have really rich forms.
And So forth and so there's a compact sizing, style, as well in, it and then text boxes get 33%. Tighter and 85 percent more, things fit in lists, and. That same reduced font size still works there so that you, have a kind of coherent look to the overall app and so. I think UI density is one of the top things we've heard about people these, sizes we've made sure things are still touchable if, you're, worried about that and still work well with touch input as well as working great with mouse keyboard, in the other ways people want to use their computer, and we're putting you in control of how dense you want to go and so let me show you a little bit of that in action so. Here if I open up the Van, Arsdale app I, had. Mentioned. How I can go and you know customize, some lamp and I don't. Know dude, you do and then I want to buy it and so, here I get a forum this whole app has been in the new default sizing, by by default, and. This forum here is in the default, density, and you can actually see it's a pretty, appropriately. Done form for the amount of fields, it has and so forth it fits well in the screen it's. It's comfortable to use I can I can go and use it but, um if I wanted an even denser form maybe I have even more fields, I need to put than just how many on this we've. Added that to, this apps if you shift click on the buy button in the sample app you get the Advanced, Mode of that form and here's. Showing off the compact sizing, and so you can see that you know you can really pick the sizing, that makes sense for your for your application, and your cases that that works best for you, and. It's pretty simple, to do, and. We also have a sample for, that in the gallery if you're trying to look more to the code. Of how to do that where, you can go and have. Fun playing with switching, between the sizes all right. So. To take advantage of that as, I mentioned just. Use the winuae default. Styles and you'll start getting that new density, if. For some reason you're, not you don't want to do that or not doing that you can set the max tested version of your app to the 1809 SDK and then when your app is running on 1809 or later it'll have that new density, but. If you do that and. Your app is version, adaptive, then just make sure that you're aware of that and testing for that kind of layout changes, and stuff, that's. Why it's usually easier for most people just to link to the one UI and use that version directly. All. Right, and. Then so use the compact sizing. Which. Will be. There shortly you basically just, merge, in the uwp compact size resources. All, right so that's how you can take advantage of that and you can do that at different levels of the hierarchy of your app as you need so you can do so the whole lap you know just to a form in the app you, can kind of figure out how you want to do that and it's actually a great starting point for customizing, your sizes, because we're, doing work to make, sure that all, the, templates, of controls have reasonable, kind of thicknesses, and size values, they they. Use as their baseline and so, if you wanted to create a custom, sizing. Scheme yourself you, could start with the UTP compact size and you can go tune, a bunch, of those kind. Of specific, resource values, to your own content, so, we, think you'll have a lot of flexibility, to create really great dense, productive, applications, that that meet your customers needs the right way so. That's UI density a second. Thing we hear a lot about is. Color, and and branding. Windows, has you, know very lovely, color. Scheme by, default to it based, on the user accent color and. Kind. Of branding to it but, you. Know you often have your, own brand of your app and your, company's brand that you want to express through the product, and, maybe. Colors, probably, the top way people try to do that and if. You wanted to go and recolor, all those controls, and all those styles including all the states of them the hover States and press states and so forth to. Kind of have a UI like this for example that, would involve today in zamel what saying, styles, and dozens of controls, maybe even return plating some controls to be able to do that and so. We've, been working, to compensating is much simpler and we asked ourselves what if you could just pick three, colors and then it just worked and that's.
What We are happy to have now and so, let me show that to you. And. So. We have a new tool that. Is, available. Today, actually, the first time and I'll give you the URL at the end which is the fluent. Zamel. Fee matters is available on github it's open source you can go dissect. How, it works if you'd like to and. What, this tool, does is it's actually showing you this is live running code of all, these different you know controls that we have. You. Know in the platform. Toggle. Buttons and calendars and so forth and. It's. Using. The colors here these three colors in the left or the light theme the three colors here in the right, for the dark theme and we. Have a few different presets, I also like lavender. Lovely. Very. Nice. Forest. Some. People's favorite might look like a coffee. Brand, not. To name names. Nighttime. And. All. Of these and. All these different presets, did is just set these three different colors that's it and because. We've set up the hierarchy of brushes in the platform, and in the style sheets in a way that they derive from, these colors. Really, all you have to do is set these three colors and have all the, UI kind of come alive with a new color scheme for you and so no, longer do you have to go in style control, to control to control if all you're trying to do is just easily. Color scheme and, you can go customize, these in the tool too so there's just some presets but if I wanted to go and say you, know what I like dark. Night. Theme but I want to be dark green. You. Know I can go do that and they can tell you and I want this to be kind. Of a greeny kind of color and, I want. This to be instead, of our yeah I like yellow better. And. You, know so it's very easy to go and and, it's then you know changed everything about you, know all these controls so even, the press state of this slider for example now and. That's not because all the controls just use three colors if, you expand these you can see there's actually a whole bunch of computed, colors that that derive from those and. Then the controls I'll use that but it's as simple as just saying three colors she to do that the. App is also smart about, helping. You with contrast. Ratios. And accessibility so. If I went and accidentally I said oh I'm gonna make this super. Bright green you'll see that all the sudden this turned red because, it's not me in the contrast ratio so. You have to have at least four five contrast ratio me text legible and so that, turn red and indeed. If I were to stick. With this you'd say hey it's kind of hard to read that text it's not really accessible, anyway. When you're done you, can hit export and it just gives you a bunch, of zamel resource dictionaries, you can just copy and paste into your app and and have that so, it's. A really great tool, we're excited make that available and the and the, win UI styles, have, been all updated to support that, resource colorization, scheme, and. So, you could just take those color values, and put, them directly into kind of a resource, or. You, could take advantage of a new feature we have in the platform, in 1809 called color palettes and color. Palettes make, it easy to just use those colors to define. A palette and then apply it not just to the, whole app but to a region, of your app as well because. One of the things we've found is that a lot of apps don't, just have one color scheme for the whole app but they have oh this. Pane has this color scheme in this other area has this color scheme especially, more complicated, and sophisticated business. Applications, oh this, this region, has this color scheme this other one here and so you can actually use this tool to make a set of color schemes and you, can use the color palette resources, to apply those different color schemes to the different sections of the app and so it's very easy to do, that and they kind of cast gay down, and. So, that's how you'd apply. Color palette to a region of your app you. Kind, of you know define some resource dictionary my theme dot sam'l and then you've merged that at whatever level of scope is that you want to have that so, I think it's pretty intuitive and straightforward, so and we're excited about that we hope we hope that will help you brand your apps more easily. Also. In terms of expressing. You. Know your brand in your apps and delighting, your customers, we've done a bunch of investments around motion, and.
One. Of the things we introduced a while back we're connected animations, these been there for several releases and are one of the more popular, features. And animations, that help you transition, from one screen to the other and guide the user you know motion that can really help improve the usability of your app actually cuz you can help guide the user help, them know what's important, what to pay attention to understand. Where, they're navigating around if you have a complicated, set. Of data they're navigating through and so, kids animations, we've kind of improved them this is your this for free, the. They have a kind of a more, natural animation. This gravity thing that scales a lot better on bigger screens as well, as smaller screens as well as some knobs to customize, it. But. More, poor, I think, even more excitedly, were enabling. More types of animations, much much more easily for example developers. Because you can now apply a whole set of composition, animations, directly on UI elements, and so, Zen, was forever supported, time-based animations. Storyboards. Or time-based animations, these are animations, where the. Oh, there's a you know a little counter, a little clock and that causes the animation, to transpire, but, there are other types of animations, and and now those are support as well ons mo elements there's natural motion animations, think, of like a spring, function. As. Something called expression, animations, that's, where the properties. Of one object are animated. In relationship, to the properties another object so. You can choreograph and coordinate, animations, in your application, and these are much more sophisticated types, of animations, than just simple, time-based animations, but now we're making them easy because, you can apply them directly on UI, elements and zamel and so. An example of a natural motion animation in play might, be this button. That I've had a little kind of grow on it effect. And it's, see, how it kind of spring bounces all we did is hook up a dam. Animation. On - that, hovers. And then. Here this expression animation, shows see how as this, Scrolls a bunch. Of things moved in relationship, to the scrolling that circle GRU text. So. Pasady, changed, those other buttons translated, and moved and so if you want to create coordinated, animated, experiences, like this that are based, on scroll, position in people's motion. And panning, and things that are doing like that expression. Animations, make it really easy to set. Up that infrastructure. Of how you want those things to relate and then just run that as the, user does interactions, and. So. To. Use these you can now actually invoke composition animations directly on UI elements if anyone's if anyone tries anyone here use composition animations, before in, the audience. Yeah. You it's, kind of tricky to do it today because you've got to get the underlying view. Out of the UI element, and there's. Kind of more steps to it and so now it's really simple something I think a lot more people can just start taking advantage of, so. Just, call the, start animation function, you pass the animation you want to it and we. Support composition animations and a whole bunch of properties so, if you're saying the opacity rotation. Translation scale, all, these different, properties of elements, can. Now be animated, with, those new mechanisms, and the other thing we're introducing, some called implicit animations, also, we. Think makes it a lot easier for you has anyone ever seen those infomercials, with a set it and forget it guy, yes, I'm talking about like that oven kind of thing set, it and forget it and then the chicken is roasted.
Well. This is kind of you know our version of that implicit. Animations. All. The time there's times when you're changing a property, of something in your code for. Example I have some calendar, and I'm saying oh rotate, it 90 degrees I don't know why one rotate 90 degrees but that's, the kind of day and, with. Implicit animations. You. Can set it up so that whenever you do any of those kind of property changes instead of just happening is a one-time action it happens with an animation so if I went my code and I said rotate that it, would actually do it with a smooth animation and so implicit, animations, are a great way to hook, up, the. Animations. You want a different transition points and then just have them run by the system automatically, without. You having explicitly, start, them and stop them. And. Setting them is quite simple so let's. Say I have something that every, time I move it with, the translation. I wanted, to animate, that move not just, do it at once out. Set a, translation. Trigger. And, then I would. Configure. The animation, I want to run in response to that trigger so here duration, for half a second. And. Tada. Anytime I set the translation, now and that my grid this. Set it would run with this animation and you can do that for a bunch of things opacity, rotation, so, forth, and. So let's take a look at some of those, new. Capabilities in action, with. Animation. Doo-doo-doo. All. Right so, here's, that kind of fun button one, I was showing you before and the, sample show you all the code you know for how that can define, that you can see that there's a lot of flexibility, with how bouncy-bouncy, you make it and imagine you're trying to draw attention to something in your app you want to make sure that users click, something or don't click something animations. Can be a great way to help guide, people here's. Expression, animation so as this, square grows the circle, shrinks. Here's, kind of using you know a bunch of them in connection, with one another. So. You can have a lot of fun with. That and then, I think the implicit. Transitions. You. Can see that kind of did that slowly. Over here mirror set of rotation, let's. See how that animated that and that's not, because you called a function. Animate it's just because it was implicitly set to whenever that value changes and I made it the. Van Arsdale laughs actually I think makes use of this in a cool way if I go to the my lights view versus, the shop view. See. How that pane on the right comes in and goes out and. A, different one comes in the way that's done is all we had to do with the developers, when they navigated. Just, trans we just move that one paint off screen and move another one on screen but, it got animated, automatically. Because of implicit transitions, okay, so, a lot of lot of great ways to take it man that. All. Right so talked about density we talked about color branding, and motion. Let's, talk about depth and layering a lot of apps you try to create today you're. Not going to be satisfied especially, if it's a more sophisticated app with everything just being flat, there's going to be layering to your app you're gonna have pop-ups, you're gonna have panes, that maybe sometimes want to overlap maybe you want to have sub, sub. Windows and so forth and how, do you manage that and present that we. Don't have we, haven't had in the past a really great way to do that and so something we're introducing, is depth, is sort of a first class concept, to the platform, so let, you leverage not just X and Y to layout your app but Z as well. And. The way that's manifested. The way you achieve that is with. Shadows, on a 2d screen and. We've. Tried to make it simple for you in the platform, so all you have to do is set the Z, translation. On the element, and tell. To show theme shadow and then it'll automatically, handle, will take care of drawing the right size shadow having. Shadows that overlap, and doing the math, about oh this is 30. Pixels in the head of this other thing and so it's shadow should only cast you know so much on this other element shadow and so forth and. I hope you can see from this slide but, this shows if your Z depth. Of 1 versus 24, you can see it as the item Z depth gets closer and closer the shadows bigger and bigger I don't, see that, and. So using. Z translation, theme shadow. You. Can easily achieve this and, this is something that's coming soon you may have seen it in some preview builds we had for 1809 we, pulled, it out because we wanted to get it just right before we shipped it but it'll be back in the preview build shortly, and. You. Know it's like I said all you should do is say that you want, to have theme shadow on and.
Set. The, translation. Of how much you want to have the item element. Translated forward and and and, your setting because translation. Is one of the things you can animate as I showed before you, can actually have cool animations, of things popping towards you and away from you and so forth to. Guide, users and help them understand what to do in your app you. Don't, have to do any work if you want to have take advantage of depth because we're, having all the default, controls he eventually at the right way by default so, if you're just using menu. Flyouts and combo boxes and so forth you'll get, that new feature by default, for free as. It comes online, and. So. We, think you'll really like having depth as a first-class kind of concept you can take advantage of in the system related. To that we're making some updates about how we use acrylic, how. Many people are familiar with acrylic or I've seen that before, in the past it's kind of that transparent. Material. Effect. One. Of the reasons we created that was to help support layering, and the idea of layering your app so that people know was ahead of what other elements, now. That we have shadows and depth we're, actually focusing, acrylic, so this is just like an FYI but. You'll see the default styles, that we have we're focusing acrylics used to be more semantic, and so, we're going to use the depth shadows, to achieve layering, that visual layering and acrylic. Will be more to indicate something's transient, or light dismiss and so for example a menu flyout, that'll be an acrylic because if you just tap away that goes away if you click away it's light dismiss whereas. A dialog, it'll probably have a solid, background not an acrylic because, clicking, away doesn't make you go away you have to actually act on the, okay or the cancel or the save or don't save or whatever from the dialog so, that's just a. Cage. But how we're using acrylic, and why. So. Depth in layering then there's a couple other little improvements we made around interaction, that you might notice they wanna let you know about. You. Might be familiar with reveal, hover, and. Reveal highlight that's the name of that effect we have as you hover over interactive. Elements, to let you know they're interactive, and so, we've made a bunch of refinements, around that on, how it renders, with different types of backgrounds and, as well as the press animation, and so, you'll notice that it's. On more controls now including, calendar and others and. You can now so now apply to focus, States this is relevant.
To Folks who are building apps for Xbox especially, but you can have that focus reveal, they. Are not just the kind of boring, solid little rectangle, focus rect and, also, on the interaction, side if. You're using elements and player that now supports spatial audio and so again this is especially people who have apps that run in the xbox context, but if, you're having I don't know some IOT display, or some other thing, you're creating more audio interaction. Of sounds, are relevant to you you. Know this is built in for free and get all those interactive sounds and now spatial audio as well. So. That's, a bunch of ways improving the fundamentals, the, density. The branding, the motion, depth. And interactions, now what about a bunch of the new controls, and patterns, that we're trying to help do a better job supporting, for you and. The first one is around navigation, one, of the most popular controls we've introduced in recent years is the navigation view it gives your users a standard way to see. The set of sections of your app that you navigate to it's accessible, it has nice animations, built in has a responsive. Design so in a bigger window it can expand, it can be collapsed and so on and so forth and. It actually has a bunch of modes today, there's kind of a minimal hamburger mode that can be in a left. Compact, little sliver mode in an expanded, mode if you ever use the navigation, view you'll probably familiar with these but do you guys know what the top piece of feedback, the top request we get for the navigation view has been to. Have a top mode and, so. Now we've added that as well and so now, you can have your display mode have the navigation view in the hamburger State and a compact, left stay and an expanded left state are also on the top and. It's, very straightforward to do but, because there's the common API, to, both modes of it it's, very flexible for you you can easily switch between the two if you want to and you get all the same kind of rich features so you get support. For pane headers if you want to have a pane head or me with your logo or home button thing you, want have a pane footer with extra little buttons for, settings.
And User, that. Kind. Of custom, area we can put custom content, and. That vent are still a pew so when I'm buying new lamps it goes there I'll show that to you. There's. A search built-in, so you can just turn that on or off if you want the search box to show up and will show up in the right place and work for you settings. This is kind of built-in knob for you and. There's an overflow model, in both cases so if you have more nav links than fit on the left they scroll on the, top they go into a little overflow more menu so users can always get to them you know to worry about that it's responsive, by default, and. Back button is now is now built into and that's something that we recently. Changed and it's, it's on by default there. For. You and so. Just using the nav you you get that kind of standard back button placement in. All apps that's, kind of nicely aligned if for. Some reason you're not using the navigation, view maybe there's no navigation. Or no it's. Not appropriate for navigation, in your app we, also have that button style explicitly, so you can use that too directly if you just want listen it looks the same, and. Let. Me show a, navigation, view in action to you, so. You. Saw it here in the Van Arsdale app. That. As, I was creating. More. Lamps for example it's actually adding little tabs here so that's taking advantage of the. Style ability, of the navigation, view at, the top but, it still gives you that same kind of common model and I can hit the back button and it goes back and I hit the back button again it goes back. So. This is using the top navigation view, here, one. Of the things that people sometimes ask us about is tabs oh I want to get tabs in. In UWP and in. In zamel and I. Want. To show you. So. If you're the navigation, view samples in the sample gallery you. Can see. You. Know a bunch of different use cases here, and one of them is tying selection, and focus or tabs so, one of the big differences between a navigation, view and a tab traditionally. Is that if you, move, keyboard, focus to, top. Navigation. If you, move having the left and right arrow here it's moving focused, but it's not navigating, because, sometimes, a lot of people when they have a navigation, at the top they don't want every arrow, key sort to cause a whole navigation, of the app that's too disconcerting, to users and so by, default it doesn't it just moves focus and you have to actually hit space to do the navigation but. In the tab context, people often just want the arrow keys to instantly, switch from tab to tab and, so, we've added a selection, follows focus, property. That, you can set and, then that'll basically make this work exactly like a tabs control from an interactive, perspective, so I'm hitting the right arrow on my keyboard or, the left arrow and it's instantly navigating, okay so, that's that's supported, and also it'll report up as the tab accessibility, pattern so for, a blind, user who's using accessibility tools, they'll, get the right information, about the interaction, there, okay.
So. That's navigation. View. Improvements, so it's about commanding, one. Of the things I showed, you in that Van Arsdale app and. That's generally true is that good. Apps often expose commands across multiple UI services for example in that vent are so app I had delete was on the right-click menu because Mouse users expect to right-click delete. Is a little hover, button too often a common accelerator, people do have little buttons on hover like you've seen that in Outlook for four years I'm sure and. People, also you, know if they're using touch they just wanna be able to swipe to get to actions and as, a developer, if it can become quite overwhelming. To support all these different exposure. Points, for your commands, you'd, have to write kind. Of all this code to, say, oh the title, is delete, and title is delete the tunnel's delete the icon is delete the icon is delete the icon is delete the, tooltip the tooltip the tooltip and so on and so forth it's very repetitive and so, to. Help you do, that and help you have a great app that exposes, commands all the ways people want without, having to repeat. A lot of code and being an error-prone situation, we're introducing, something, called UI command, it makes it a lot more scalable and, so. You, can define the UI command. For each command, that. You want to have in your app and in, that it's one resource, that defines, the label, the, tooltip string the icon to use all the kind of UI information. About, the command. And. It's. Actually actually I think you'll see this is called as my UI command in the latest SDK if. You search for it uh and. You, can then reuse this in the various controls across your experience, and each control presented, automatically, the right way for you so, even though I put that same exact, UI command in a menu flyout, or in a button or in a swipe item it. Got presented, as a menu item in the menu bar it got presented as a swipe item the right way in a swipe thing you didn't have to change. That you just gave the same the same UI command to each one and each control takes responsibility for, presenting. It the right way and. So, we thought that makes it a lot simpler for you guys to do that but, we thought would take it a step further it. Turns out a lot of apps have the same exact commands. A lot of apps have cut copy paste and, delete and, undo and so forth and so we've actually defined a standard, UI command object as well it, literally has the standard, icon set the standard shortcut said and all those things set and so you can literally just reuse, the standard, UI commands, building your app up without. Having to go even find, what is the icon to use for delete and so forth, you. Still get to control, the actual command itself the implementation, of what, does, and. If you're using mu VN you. Just provide the relay command for example that you're using so. Here I'm creating a standard UI command, a, kind. Is delete so it's a delete command and then, I'm just telling it what, I want the command itself to be but, all the UI stuff the icon the label the localize label by the way somebody. Localized, for you is, all provided and. If you're not using mvvm you can also explicitly, provide an execute and k execute method - all, right so, UI command, sam'l UI command and standard UI command should make a lot easier, for you to expose your commands in your UI in all the right places one. Of the new places you might want to expose. It is menu bar so that's an old favorite that's back and. We have a great implementation, of it that has all the right keyboarding, and and so forth you'd expect sub. Menus etc it's. Very straightforward, to to. Use and it leverages menu flyouts as. The menus themselves, so if you have a menu, file you've written because part of a context, menu you, can reuse it in your menu bar that same as that code in both places we, make sure that's interoperable, for you. So. In addition of menu bar, we've, also introduced the command bar flyout, is a new UI. Affordance. For commanding, and, this. Is all about contextual, commanding, especially. In an era where there's a lot of intelligent services people are starting to try to run and. They want to show contextually, the right commands, on selection, the right commands on objects, the. Command bar flyout is a great control for you to use to do that if anyone's used office. And. You've selected text, and you've seen those little floating toolbars this is kind, of very.
Similar To that but what's nice about it is it integrates actually, the capabilities, of the context, menu with. A command, bar into, kind of one in one unit that you can use and, and. I'll show you how that works so let's, go take a look at it. So. In. My van, arsdale sample. App let's. Say I'm customizing a lamp here one. Of the features that this hypothetical. Company, provides. Is an, engraving so I can have a little engraving, on this on this lovely lamp that I'm buying and so I can say. I'm. Loving Microsoft. Ignite. I want to write that in my lamp or, dear mom here's. A lamp from ignite, and. Now let's say you know what I want that word loving to be italicized. I'm, just going to select it and you'll see that the, command, bar flat showed up it has the italic, command on it I click on it and I've italicized, it and so, it's, much more efficient, as an app developer I didn't have to have a toolbar, with those kinds of commands, all the time on screen or have a menu bar for people to think Oh is there even an option, around that I could just contextually, present that right away and, that's. Actually built in for free so this app actually didn't write a line of code to make that happen, because, they're using a rich edit box we've by default provided, that built into into, there so. In, addition to in text scenarios. You. Can also take advantage of. It. Just, for other cases, where you want to show something, contextual, so, here I have an object with. It's a photo in a presentation. App so. If I just tap on it you'll, see that the little command bar flyout shows up if. I just click on it it shows up as well but what you think is gonna happen if I right click on it if, I right click on it it's gonna show up actually, expand it so you may have notice there's a little dot dot dot here so, the dot that's out even if I clicked on this with, just a left, clicked. I, could expand it to get to like the extra commands on it and. If, I right clicked we knew you kind of wanted it expanded by default and so it automatically opens an expanded, State same, with press and hold if I just tap it's in a minute fide state if I press and hold, you've, probably indicated okay I want all the commands and so it opens an expanded state and so it's really a nice model that gives you the same richness of the amount of commands as a context, menu and model for that but, also a more proactive lightweight, kind of canvas to get contextual. Commands there for people. So. That's the command bar flyout, you, get it for free using. Any of the standard text edit controls. Including. Cut copy paste as, well as rich, formatting, options if using the rich ones, and. You can customize, it to present your own commands, if you have a medical. App and you want to have medical terms inserted, and buttons you know around that you can do that or whatever your scenario is, and. Using. It's very similar if you're familiar with command, it's, the same kind of API model, there's a set of primary. Default. Items and show up in the tool bar part and then the secondary, items show up in the menu part and you can define what's in the primary and what's in the secondary. And. You, can also take over the one that's on the text, control if you want to overwrite its defaults, and replace it with your own and. This code snippet shows how, to do that you, just get the. Rich. Edit box this is selection, flyout, property. And, you, just replace it with your custom flyout. And. In. General this is great any time you want to proactively. Expose commands to customers, if, you have lists you should probably still make sure to have all the best practices of lists tons like swipe and so forth and. But. It's really a superset of what's in the context menu as I was mentioning so you can for most cases we're using a context flight you can actually switch to to, the, command bar fly on a few months if, you have more little button II kind of things you want exposed to, and. Finally to kind of finish rounding at the set of things we've done around commanding, we've also added a bunch of standard button types for you drop down buttons split button toggle split button and.
So I think you'll, find. That overall. In the commanding, space we've really had a lot both in terms of the model improvements. As well, as menu, bar command, bar flyout, and all these types of buttons to really flesh out the richness of applications, you can create. One. Of the most common, things people do, in applications. Is. Really view and manage collections of data stuff. You've gotten back from some database for. Example and we've. Been investing a lot in the controls for, that space as well. First, and foremost is a data grid for you to be p available, now and it's, a very rich data. Grid as as you're, seeing here in this little video of it all, those kinds of options you'd expect, around editing, inline resizing. Columns sorting, columns. Having. Multiple. Selections, and so forth and. You'll. Find the API to it is very familiar to the server light data grid who hears use the Silverlight data, grid does anyone use that before yeah a few people so, if you've used that before you'll find this extremely familiar to use we. Paid. Attention to making sure that it have kind of naming. And so forth it makes it very very, easy with your code forward to it but. The UI's been refreshed. Of it it, has touch, and pen support, panning, with track pads all that kind of stuff works. And, it's, actually available in the community tool kit but link to from the winuae sample, if you go there. So. Datagrid, hope, I think a lot of enterprise apps will really benefit from having that we've. Also been. Improving a tree view control it's, a very full-featured tree view control with all the things, you'd expect it, has a better multi selection and drag-and-drop model, built, in now and we improve the data binding and templating, of it one of things we've got feedback of I don't know you've tried that the tree view was people, wanted the data binding models to be simpler for it and. So just, to show you what we've done there is when. You're using a tree view you. Can you know there's an item source property, on it just like there is on list views and other kind of collection controls, but. How do you do the hierarchy, aspect, of it and so we've actually put an item source property, on the tree view items so tree view has a bunch of tree view items in it and. Just binding, your item source of your tribute item to, the next. To the recursively generate the children you want to generate, and. So you just kind of point it to whatever you. Know field in your data structures is giving you that and. So it's very easy to kind out create, tributes. Of data binding so. I hope you like it's a little different than what you might have done before in WPF but we think it's a really, simple good model for you. We've. Also added something called refresh container, that lets you pull to refresh people. So just want to do that with touch screens it's. Very simple to do it's very flexible it has all the little, knobs you bought and so I think the easiest thing is just to go see these features. So. Here's. A the data grid, you. Know sample, and you can see them kind of panning. Up and down I'm just using the trackpad gesture, to pan and that's all you know supported, the. Right way and I'm, resizing, columns, and and so forth and you have tons and tons of knobs so. If I want to have alternating. Rows be tomato, colored, with, green labels, or whatever you know that's very trivial to do, there's, a lot of settings for users can reorder columns or resize them. Just a lot of stuff is built-in for, you and makes it very easy to just point it to your data and you. Know go, and, so we think that's a great addition. The. Treeview. Sample, I kind of showed you a little bit before so. Just show you the pull-to-refresh. So. Here just. Pulling down and. You can see it's kind of rotating, that little thing and then at a certain point it does a little pup and that's how you know you've crossed that threshold and, then it'll spin. Around and, then add your new item so it's, also. Pretty customizable. So if you didn't like the standard arrow and you said oh my. App needs to have a little Sun you can make you a little Sun or whatever, whatever you want to do and go customize, that and so there, you go and, there's one other thing I wanted to show you in the collection space because some people have noticed this and asked about it and it's in preview, as.
I Mentioned when UI pre-pre. Releases include features in previewed, under development but some people have asked about this and so the sample actually now covers features that are in preview is the sinkhole items for Peter. This. Is sort of like, an, items control, it's. Really more advanced features for people who were trying to build their own. ListView. Type of things because you, know ListView weave list view grid view tree view data grid we've a lot of list controls for you but, if you have a very custom layout you're trying to do and, you really want to build up your own control. Entirely this, is a new kind, of primitive building block you can use that makes. It easy to define. Custom layouts and. And. Just. Kind of spits out the items with really good performance, and, so here's. For example someone's. Done kind of a not, a pure grid but a custom, kind of layout and, you can see it's you know Scrolls, very fast and it's fully virtualized, and. It makes it a lot easier to write those so that's, a pretty advanced topic but if you're interested you can go look at the sample and learn more about that and it's in preview, right now all. Right, so. That's, kind. Of some of the missions in the collection space and then finally. Rounding, out the session forms and data input tons and tons of apps have a lot of forms, and data input, aspects, to them and. So one, of the things we've been investing, in is giving you a great visualization. Built. In for form, data validation, this, was actually in some preview builds and. You, may have seen it there and. Even tried it and we pulled, it out because we actually want to move it to when you I for, you because, we know that you. Would like this feature in market working against artists one and above already and so, rather than ship it just, in the platform we're actually refactoring. It so that it's in when you eye and you can use it from there, it, gives you ready-made, you know visualizations, for form validation they're, all customizable. So there's some default, where maybe there's a little label below would, that would show that string from your error. But. You. Can you, can change those templates and customize, customize, those, how you'd like and. The API. Side of it is very straightforward. You. Just, bind, to the properties on your model and you implement, I notify data error info as you've, probably doing already if you've done data validation, in the past this. Means it also works with data annotation so if you didn't make sure those that, kind of works for free and then the, platform, takes care of the heavy lifting for you you implement that and the control take care of showing, the. Error state when it needs to show the error state in that string and. You, can also customize when the validation takes place like on property. Change or on lost focus and so we think it'll be really nice implementation, this should be coming soon free. To take advantage of because we really care about making sure you can create great forms, with. With modern, sam'l 2, we've. Also done some other improvements. Comma, boxes can be editable I show, that in that men are still app before, so. You can not just pick from the list of existing values but type in a new value, or. Type. To complete, a value it's, very simple to go do that the API is kind of what you'd expect. Also. Soon you'll be seeing combo boxes open bigger and larger screens, we've gotten some requests, about that and so yes, that is coming. And. Finally, in the form controls area, I just wanted to mention. Mention. That. You know the text box controls are really excellent in the modern New York's platform they have spell checking they've, inline in handwriting lots, of features one, thing you might want might not know about that we recently added with support for at mentions, and so if you have cases, where people, want to type an at and then complete people's names or complete, locations. That's. Actually now built in and it's just a few lines of code support for that into, your application, so. Let. Me show that to you real quick. All. Right here. So. Go to rich edit box. And. I'm gonna say see, Miguel sitting there someone say hey. Miguel. Have. You checked. Out. Disney. Springs. And. So as. The developer, is literally, just this code, to go and enable that and so if your application if locations, are relevant your application, or other. Contacts, of the users system are relevant you, can easily enable that there. So I wanted to show that because it's pretty, cool and starts getting some more intelligence, and data and stuff right into your app or easily.
Okay. So. We. Talked about UX. Fundamental, when you I knew X fundamentals controls and patterns and I won't talk about developer productivity and I hope a bunch of those features will help improve your productivity, but. We think there's in more, productivity. Specific, features we've done then I want to let you know about and the first big area for us has been around binding, an