What's New for Windows UX Developers: Fluent and XAML
You. Hi. Can you guys hear me. Hi. Thanks for coming to this session at the end of the day my, name is Paul, gust Marino and I'm a program. Manager on the windows UX platform, team and work a lot on the fluent design system, and the, UX platform, just. Gave me a sense of who's here. How, many people in the audience are building, apps with Windows, 10 zamel, you, know you WP apps alright, excellent. Welcome. Today's. Talk focuses, on the new technologies, new advancements. New features that are coming to, UW PMO Windows 10 sam'l and as Kevin talked about in the keynote this morning that's, really applicable to all, windows developers, even if you're have WPF, apps wind forms apps and, if see anyone here have MFC apps still, yeah back in the audience there yep, it's. Applicable to all all Windows apps now with, the sam'l islands technology, so hopefully this talk, has stuff of interest for everyone I got, started my, first programming. Language that I ever used was Apple, soft basic, on an Apple 2 which, was, actually a dialect. Variation of, Microsoft, basic, and. So Microsoft has a long history of having many dialects. Of the same language --is, and. Over, the years like many of you I'm sure you've seen things. In software, development echnology has come and and, transform, you've seen UX changes. Come and go and I think today you'll see some. Old things that, are finally, in UW's, ml that you're like finally, Microsoft, and hopefully, you'll also see some new things that give. You new ideas and, new opportunities. To advance stuff for your customers, and in your business and what you do with the platform I'm. Going to talk today about a. Little bit of recap of the big picture what we're doing with fluent design in the UX platform, and then most of the talk today is gonna be a lap around what's new there's a lot of stuff I'm going to cover about the, UX fundamentals, and how we're advancing the platform, in, kind of the fundamental ways with density and depth and motion, color and interaction, changes I'm, going to cover a lot of the new controls and patterns and improvements, we're doing there to help you easily put. Together apps that look and feel and work great for customers and. I'm going to talk about some developer productivity improvements. That we're making as well and, then at the end will kind of wrap up and I'll have some QA so. Let's. Get started with the big picture fluent. Design and Windows UX platform. If. We kind of step back for a moment you're sitting there at your visual. Studio and ready, to create your app main, page dot, sam'l and insert. Good UX here. Creating. Good user experience is hard it's, at, the intersection of art and science and you, have to solve tough technical questions, how do I connect. These different data sources in, an efficient way that's, performant, how do I perform. These operations in a way that doesn't block the UI thread in is responsive, and at, the same time you have to handle, nuanced, experiential, questions, like how. Does this make people feel do, they like it is it useable does it let them get the job done well and. It's. Especially hard, if you're, trying to create powerful, functional. Applications, that have lots and lots and lots of features for, users and, we. Can all laugh at this, picture, but, this was the state of the art of UI design, in the year 2000, and.
Things. Have evolved, and they continue, to evolve since then user, expectations. Change. New. Devices change, Sascha's talks about the world of multi device and multi sense computing. Where. People have new ways are expecting, to use their computers, and so, you, know what we try to do with the platform and, with the design system, is help give you a great path forward, to have, those cutting-edge new design trends, those new capabilities. Those new patterns, that meet user expectations. As the, world moves forward in. This, multi sense and multi-device, world. And. For us how, we're trying to approach that is we're trying to really give you a comprehensive, solution as. Experience creators we hear a lot of feedback from people that you don't just want pieces, that used to put together but, you want an overall solution with not, just a great platform. But guidelines. And samples. And tools support, and so we've been working to to beef that up for you and to give you a really comprehensive. Solution. To creating, user experiences, with the fluent design system, and and, the work we do in the Windows UX platform, and I hope some, of that comes across today. Because, that's really we're trying to do with fluent and with the platform is give you that comprehensive solution, to empower, you to create the best experiences, for your customers. So. Let's. Dive, into some of the things that are that are new and I'll. Start, with a little. Demo, of the two apps I'm going to use to showcase. A bunch of the new features today and, let's. Switch over to that, computer. Alright. And. Let's. Go. Here we are. How, many of, you are familiar with the sam'l control, gallery people. Seeing that ok good number of you so this, is a pre-release. Version. Of the next. Set of updates coming to the sam'l control gallery as you know we put this out last, release. Last. Year and we've, kind of continued to invest in it so there's now over 75. Samples. Covering. You know whole range of the features and topics, in the platform, this app, is entirely open source it's up on github so you can see all the source code of it and all the samples and each, of the samples even explains. A bunch of different use, cases in scenarios, so here's, the tree view sample for example and, it covers you know how to have. A simple tree view with drag-and-drop in it it. You, know shows you code of how to do that how to enable multi selection how.
To Do data binding how, to do custom templating etc. So all the samples in this app really cover a lot of use cases as well and so in, all there's you know hundreds. Of samples here that you can really use and, I'm going to use this pre-release, version to show you some of the new features because, our our team builds this as part of building building, that platform out and so these, will be things will be available for you you know later this year some some of these things, and some of the things are already out in the, version we just shipped so this is one of I'm going to show you but. Creating great UX isn't just about the individual pieces but how they all come together and so, we've also put, together a great new and 10 sample app for you and, it's a smart lighting app so how, many people saw the build cast app are familiar with the build cast app some. Of you so that was an intense sample, we made last year that. Showed how you can put the pieces together to create a great fluent, experience, and so this, is we thought hey you know what let's do people yet another one they can use and so this is a smart, light app it's. About man the lights in your home so you can you. Know click on different lights you. Can select, all the lights in a room like your living room and you can customize. Their light settings. Ivan, go to party mode to sleep mode and. Turn. You know turn lights on and off etc you, can also manage individual, lights so if I have, this floor, device see maybe I decided want to rename that I can right click and there's a you, know rename command so I go call, it something else. Alternatively, you know a lot of people have touch screens or have trackpads and. So using a trackpad gesture, or the touch screen you can swipe, to get to the, same exact commands like rename and remove. So. It's kind of lets you manage the lights in your home and the app also shows, a shopping. Kind of experience, so if I use, this navigation view, at the top and one of things I'll be talking about is the navigation, view improvements, I can. Switch to the shopping screen, of the app you'll, see there's lots of nice motion, in the app and that's one of the things we'll also talk about I can, go and I can create some new app lamp, I, can. Have fun you know customizing, it they. Will do this, space or this space I don't. Know what looks good, there. You go and I can go in and buy the app lamp, as well so, it's just a sample app that we'll be using today that shows a bunch of the new features and how you can put them together and, this will also be available as.
An Open source sample. For you later, so. Let's. Head back to starting, to dive into, oops. Some. Of the new things we've got. Alright, so let's talk about UX fundamentals, how many of you have heard, about density. Changes. Happening, because, it's been talked about a bit how. Many of you think you know Pui is the perfect density today we shouldn't change anything. Okay. Well you'll be happy cousin. Tito. Well. I think you'll, find they were finding, a good happy kind of medium of how we approach density. So. You know there's the old density. Sizes, we've, had for a while and uwp since windows 8 days pretty, much the quote. Unquote metro sizing. So. This is the new fluent, standard size so the new default in the platform, if you just go create new projects, if you have your projects target the latest OS release will have this new tighter sizing by default it, works great with touch. Mouse, pen, it's, actually what we've been using and developing through our own experiences, to figure out the right sweet spot sizing, for people and so if you've used apps like edge if you use apps like OneNote you're actually already starting, to experience this new sizing, and now we're standardizing, that across the system, you'll. See things like the toolbars are 20, percent tighter. There's. A type. More tightness in margins, of headers for. Forms, and things, like tree views and list, views can fit forty percent more items again they still work great with touch especially because list, views and tributes didn't have enough width to them but. It's a new kind of tighter you know better default, but, beyond that we really want to give you control over the right density for your app to have and. So we've refactored all the control templates, to pull all the hard-coded values out of them and make them accessible as resources, and we're, actually shipping a compact, sizing, resource, dictionary. That you can just apply to get even tighter sizing, the single line of code so, if you have that super. Big, form with tons and tons of things in it for example and you don't want the user to have to scroll you can just do compact, sizing to have it all fit and with compact sizing, even, text boxes are tighter, and. Other form controls lists, and trees fit, even more items and so, forth and so, I think a good way to see that is just as a quick little demo. And. So. This, form here in the app that I actually just showed you this is using the new default sizing, so you can see the new default sizing, fits, plenty, of information actually the whole app by default is using the new default sizing, the nav you that palette on the right hand side the, forms etc you, can see it's very comfortable, you may have noticed as using touch to to, go use it and it was very comfortable, to use work great with touch no, problem whatsoever. And if. I want as well as with mouse and keyboard but this, form here is pretty good but maybe you, have a form it has a lot more data so in this app we, actually have a advanced, by mode with shift click on by, and.
This. Form. Here is using the compact sizing, so, you can see it still has a nice kind, of amount, of whitespace a nice visual, hierarchy and layout to it but. You can get even more data in there and I can still go and you know easily you know reach to tap into fields, and change values, and so forth so that's, a you, know compact, size versus, the default size. To. Take, advantage of them to get the new default sizing, just. Set your max tested version to the latest SDK so though this, will be an insider, flight soon now. If your, app does target, multiple versions. Of the OS, you. Might have to be careful, about that right if default, sizes are changing of, things there'll, be some layout changes. So. You should either consider robusta, fiying your app to that by. Using adaptive. Layouts. Or conditional markup or another, option is this. Morning we also announced the windows UI library, and one, of the things windows UI library. Gives you in addition to a bunch of controls, it also gives you the styles, for all the controls including. The new default sizing, and so if you have an app that targets, multiple versions, you, can just use winuae to, get that new default sizing, and you'll have it on all the different versions that you're targeting alright so. That's how you get the default sizing, to, use the compact sizing, it's just a, static. Resource, and you can just, merge it in to your resource dictionary to take advantage of it come one line there and. If you want to do different sizing, you can you. Know start with that uwp compact size resource, dictionary, and change. The values to your heart's content to get exactly the right density for your app so, that's, how we're kind of improving density, with the platform we think should, really help you have really great powerful, apps that feel natural, and great on the desktop, and also, scale to all different other form factors still, work with touch pen and. So forth in a nice way. The, next topic is I don't talk about is depth, if you, think about density is how, you can take advantage of X Y space depth, is all about using, space and. You. Know leveraging, it to layer your UI and a, lot of developers, tell. Us they're interested in doing this to help them have better layering to the UI better information hierarchy, and focus on, their UI and. We're. Making that easy, for you to do with.
Z Translation, and theme shadows in the platform. Wow, this projectors, having fun but as, you. Can see from. The slide as. You move, things closer in Z they get a bigger and bigger shadow that's how things work, with. Z. Depth. And. Taking, advantage of that in Zam was pretty easy. You just set a theme shadow on. As. The, shadow on your on your UI element there. You go and, you. Just change, the translation of it in Z and then you'll get that shadow all right so you can take advantage of this very easily now in the platform, in. A very kind of natural way we're, actually updating, all the controls, especially on the pop-up based controls to use. Depth by default so they'll all be having that Z translation, set and the smart shadow set on them one, of the things that's you can notice it's kind of nice is cascading. You know menus, to cut the height the higher the level of Cascade the higher level of depth and so you see those shadows cast bigger, shadows, the cast shadows on other elements there's, actually a real rich. Model. That's going on under the covers here, and so while it was just you know a couple lines of code for you there's actual global lighting model there's projected, shadows that are going on there's a lot of stuff that's going on under the coverage to actually create this rich immersive shadowing. System, and depth system, but. You can just get for free just using the just using the controls, and. And. Many others related. To the depth changes, we're, making some updates and how we use the acrylic material, to give it a little bit more semantic. Meaning now that there's depth for layering. We're. Gonna be using acrylic in, the built-in. Controls more, to indicate things or light dismiss or transient, UI alright, so you'll see things like menus. Will. Have acrylic. Material on them but things like a dialog, won't both have depth and shadow but, the ones that are like dismiss, there's an extra little semantic clue for you that they like to submit you can click to make them go away because they're acrylic or so.
That, Is what's going on with depth. So. Now that's about motion, how. Many people use. Motion. In your apps of used animation, some, how. Many of you have used stuff, at the visual layer like composition api's in, addition, to like zamel storyboard api so a few of you have some experience, of that, here's. Here's a few kind of improvements we're doing around motion. First, connected. Animations, are now more natural, and flexible, and so if you've used connected animations you know they help you do transitions, from one screen to another screen in a very seamless, way for the user that preserves context. Because the same element, that you saw in one screen kind, of seamlessly, morphs into the next screen you'll, see that by default those are now more natural, so there's this kind of swoosh. Animation. We call it gravity, that plays by default and. You. Have more control to customize, the. Animation, and so you can have a different animation for playing back versus playing forward for example there's. One called direct which, we recommend for backwards, navigation. We're, also supporting a lot more types of animations on UI elements, for. A long time you've been able to do time-based animations, in zamel think. Of linear animations, ease-in ease-out, that's. We've been able to do it storyboards, for a long time now. Directly, on UI elements. In. This coming released you'll be able to do natural, motion animations, things, like spring, with dampening where there's physical forces, that you're modeling, and specifying. That control the animation and you'll also be able to do expression, animations, these. Are animations, where the. Motion, of one object is relative. To the, motion of another and so, if one object's moving, in one, direction the other one can move in another direction or, the, opacity of one is changing, you can change the, scale. Factor of another one you can have different properties relate, with mathematical, equations, and this allows you to create much. More choreographed, animations, and, so these are the things that have been exposed to the visual layer but now you can access them directly on UI elements, without having to do a lot of extra work to figure out all the visuals.
Underlying. Them real, practical, examples of that, here's natural motion animations on a button, so. It's a spring animation, there's a damping ratio a period. Of a dampening and you can kind of see that very natural feel that you can get to the UI that's much more physical. Using. That expression. Animations. This. Is something we send this call conscious headers but it's, the idea that as you scroll look. At how that circle, scale changed, the, opacity of that text change does it fade it out other, elements were translated, and all, of those were done in relationship, to the scroll position and so there's a mathematical. Function you set up once and then as some the user scrolled all those other pieces moved, in and coordinated. Their animations with that that's expression, animation, and now you can do these all on UI elements directly, it's, pretty straightforward there's a new function called start animation on UI, elements, that takes a composition, animation, so all those types of composition animations you can plug. In there and the. Composition animations, themselves, can target these properties, on UI elements, opacity. Rotation. Translation. Scale, if, you're, one of the brave and the few who go and use transform matrices, you, can animate those as well to. Do really fancy stuff. So. More. Animations, on UI element, we're. Also supporting, something, called implicit animations, in zamel and implicit, animations, are kind of like set. It and forget it you know they said it and forget it guy, no. One knows that. Their. Animations, you can set and then forget and it really makes it much easier to have a motion built into your application, all over the place and a, good example to. Understand that is, changing. A property on something so let's say I have a calendar. And I. Want to rotate it for, some reason I want to rotate it today, if I set, rotation 45, it just instantly rotates, it you know I call that function and bam it's instantly rotated, so not. Rotated, rotated, if, I had set an implicit animation, on it and I'd said hey whenever, rotation, happens I want you to that to do that with a smooth animation instead. Then. This, is what you get instead so you have that calendar you, call my, calendar rotation 45, but, it'll actually be animated, for you and so hooking, up implicit animations, makes it much easier to get motion into your app you don't have to think about timing. Coordinating, all the animations you want to play you're, just changing properties on things and because you've set up these implicit animations, they automatically, get triggered and run on your behalf and a, real-world example of that is. In that app I showed you earlier when. That pain was coming in and out all the developer had to do was just at the translation, so be on screen or off screen on screen or off screen and the, system, took care of making, sure to have it animate, in and out automatically, and, it looked much nicer than this little weird video capture I got but, I'll show to you again so, to setup an implicit animation, it's really simple in markup, you, just set the trigger so let's say I want. To make sure whenever this grid my grid has, a translation, property, change that's, a trigger I'm setting up and. Then you specify the configure. The animation you want to have run then so I just want to have that. Animation. Take 0.5. Seconds, alright and you. Can animate that you can set up triggers, and implicit animations for these kinds of properties and in. The, docs and then the samples you able to see all the different configuration, parameters you can do to control that animation, and, set it up in a really nice way but, I think implicit animations, will help you much, more easily take, advantage of motion in your in your apps and make it just an inherent part of your experience. And. I, will, do a quick demo of. Animations. All. Right. All. Right let me just use the gallery, simple we've actually added a whole animation section, to the gallery. I'm. Going to show just a couple of these so this is that demo showing before in the video but. You can kind of have a lot of fun with it by changing the damping ratio, yo. Whoa, and. It's. Very you know responsive, it'll pick up and stop and start the animation in in, you know midstream of wherever you had it and reset it so that's. That here's here's a fun little expression animation, set up like oh when this one gets big that only gets small and, so. They just they just have their scales, you. Know set up to coordinate so, that's. A couple of the. Motion. Animation. Samples. Here's. Just some more of the connected animations, in. There, so you should go check this out and you can kind of see the the code and all the ways to take fully advantage of, it. But. That's motion. All. Right so we've got better, density, to. Address a lot of the things we've asked for their support, for depth a, lot of improvements around motion, and how you can make it natural and automatic not.
A Lot about color. Making. Use of colors to brand your app one of the most common things people want to do with with, their apps branding. Is just change the color of things maybe your, app has, a brand that's red and. Today. You have to go actually style, a bunch. Of parts of controls over and over and over you can imagine how much dialing code you're writing to actually set all those color values and some of them you can't even get to because. You have to reach amp with the whole control to even be able to access the hover, States, background. Bort you know border or whatever and. So we, thought it would be helpful to give you a radically, simpler, way. To just color your app and. It's called color, scheme resources, or that's the tentative, name API, names are subject to change this, year. But. This. Really gives you a much simpler, resource, based model for applying, colors, to your app and it. Also supports, coloring, regions, of your apps you don't have to color the whole app one way you, can have different regions color different way and we're. Gonna also ship a tool this, year that, makes, it really easy for you to take advantage of the color, scheme resources and I'd like to show that to you now. And. Hopefully. You guys find, this useful so, this. Is an app that shows you know all the controls, we, have these are the real you. Know running running controls. As. You can see here and. On the right hand side here you'll see just a few different colors that you can control, and set and, we actually have a few different presets that we made so I'm going to just run through those real quick there's, a pastel set. There's. The, forest. Set and all, of these kind of affect, the the false you know all the themes and parts. And hover States and so forth of the controls. There's. A nighttime theme all. These presets are doing is changing these six color values right here and so, with, color scheme resources, just, changing, a few different color values, will, apply a change systematically. Across all the different controls for, you. And you have a lot of fine-grained control over it so these are just some presets that we made but I'm, gonna go here and pick a different color so maybe. I like kind. Of yellow so, it'll pick some yellow color for that and you can see that kind of applied it you, know across the board to all the different controls so, you can very easily just speaking a couple colors get a color scheme together for your app the. Tool also will warn you if you're if, you're doing bad stuff from an accessibility perspective so, I'm going to try and pick a dark yellow and at. Some point it's going to tell me oh this. Color may make text harder to read so it actually tests for contrast, ratios and will, warn you if you're picking color, scheme that will have bad contrast ratios so that you don't do that and then when you're done picking a good set of colors that do have good contrast ratios you can click export and just, copy and paste this color scheme resource, out of the app into, your source code and tada. Your app has been colorized you don't have to do all that styling, you know as you had to do in the past and another benefit of it is it doesn't mess with the high contrast, styles so you don't to worry that your styling, that you're doing is messing with high contrast styles. So. That's we, think pretty exciting, very easy to apply those yeah. Thank you. And it's. Even cooler because, it. Kind of brings you some of the benefits that maybe, CSS, or cascading styling. Systems have because you can actually apply it at any level of hierarchy of the tree and it'll, cascade, down the values and so typically. If you have an app you actually not just one color scheme but a few different panes especially, in a big sophisticated, app that, you want a color and, maybe. You have a blue you. Know brand, that you have a green, and black brand. You've. Different panes and you want to have different color schemes from panes, and you, can do that as well so you can put color scheme resources, you, can just you know add some to your theme dictionaries, and you can apply them to different regions of the app and so I can have this part here have the blue, and red scheme, and this part here can have the grain white scheme or whatever you want very easy to create richer richer apps this way with. Great branding, color so that's, how we're improving color and. Then, finally interaction, there's. A few changes and improvements, coming the interaction space I, think, you're all aware of reveal was the new interaction, model we introduced last release. That, has kind of this new visualization for hover and press States on.
Elements, We've improved that now so it, has much more visual refinement, it works great on we. Had some feedback about light theme versus dark theme as you can see it works great in light dark medium, toned backgrounds. We've, extended the set of controls it works on so, now it's there by default on calendars, and app bars and we're kind of broadening out the usage of it and refining it further this, is all you get this for free just using the standard controls you have this nice, beautiful light based reveal visualization. Scheme, we've, also added brought. Reveal to focus, States and so there's something called reveal Focus which. You can actively turn on and so you just go to your application, focus. Visual kind equals focus. Visual kind reveal, and that will give you this kind. Of glowing focus. State that if you've used an Xbox so, if you bring your app to Xbox you definitely want to use this, reveal. Style and also, if you have just a highly, immersive app maybe some apps have a ten-foot mode maybe, you're writing the front end of it of a game the menuing system of a game maybe, the kids app for a lot of different cases you might want to have more immersion, in the focus and. This is a great way to do that and carry for that that reveal model. The other thing we've done is we've enhanced the element. Sound player support, to now support spatial. Audio so, again. This is something that if you've brought, your app to Xbox, you're already getting you know you're already using sound for sure those are those sounds you hear when you go be pppp and move around with your game pad and, they. Now support spatial, audio and so if you're running your app an Xbox that's built in by, default and. Otherwise you can choose to turn it on if you have your app running on any other device on the surface hub on a PC, on wherever. Else you're running it and. Maybe that's. Best to do, a little demo of because there are interactions after all so. Let's take a quick peek at those. And. One. Of things we really focus on is making things, as free as possible for you so you can get this richness just being on the platform because we know there's a lot of changes that always come in so we try to build those things in for. You so let me find a seat here let's see sounds. Well. Show sounds first and then I'll show reveal so, you can turn sounds on I can. Turn in a spatial, audio on thatif well I know, this room has like surround sound or not so we'll see if you really get to enjoy this fully but once. You have spatial sounds, on what's. Your sounds on. Cue, brace volume a little bit. You. Should hear as I, move focus around. You. Get all those standard sounds of a menu, open focus, change you. Know just like you you may have seen if your app is running an Xbox I don't I don't know if you're aware but you can get that wherever your app is running whose turn it on in the platform. And. Now. That I've turned these on in the app I'm, gonna try something bulb just to go to the. Reveal. Section. Alright. Here. We are we're having some fun, and. I, can turn on the reveal focus visualizations, and. So. Now you. Know you can see that and maybe. You can hear that the sounds are coming a little bit more from this side of the screen, than from that that side of the speakers but, definitely. Go try this at home put, on your headphones and, you get to enjoy it or being friend your TV so. Anyway. That's a spatial. Sound that's a reveal focus, you. Know it's very customizable, and. So if you. You. Know other colors of things you need to do, yeah. That's all supported. As well all right. So. Those, are some interaction, improvements. Controls. And so, those are all like you know cor just systemic. Improvements. Controls. And patterns were really trying, to help you more. Easily get high quality complete, you know you eyes into, your apps one, of the places we've invested a lot is in the navigation space how you get around your app with the navigation view control it's, one of the most popular, new, controls, one most popular API is you've added to the platform and. It provides a really great experience, those. Of you who use it are aware that it supports, several different display modes so as your window resizes, it can go to a hamburger.
Kind Of minimal mode it can go to a little sliver left, compact, mode and can go to a full expanded, mode, but. Do you know what one of the top pieces of feedback we've, gotten and one of the top requests we've gotten for this control is, can. You please make it go on top, but. I'm sure you get that all right and so, now you can make it go on top and. So, we've added the, top which now supports the top navigation mode, and for, a lot of apps this is really you know what makes sense is to have navigation, links along the top some, people prefer it on the side now, you've the flexibility, in which great achieve a common programming model for it with. The pivot you're able to have, some links at the top of four but if you need to switch ever between pivot and left nav you, have to deal with totally different programming, models today if one unified programming model that integrates really well with the back navigation. And other stuff that you can use whether you want top or side navigation it's. Easy to set it this is explicit. Paint display mode property you, can keep. It in the auto mode if you like the auto mode that exists today and keep using that or you can explicitly also, control, all the different modes of the paint display mode and we've. Made it extremely flexible for, you in all display modes so there's. The paint header that now supports content. Not just text in it there's a footer there's. Ability, to put content, in the middle of the of the pain that people sometimes want their. Search built-in and settings, buttons, built in the. Sports, overflow model in both cases scrolling, in the left version, in a menu overflow, on the top and. There's also back button so it's a very comprehensive solution. For you to do navigation, your app and we think it should meet the needs, of a very large, set of app offers to. Get great high quality navigation. On. The back button one of things I wanted to point out is that there is now back button being drawn in the app content, area and this is related to some of this window, sets, changes. That have happened where there's that kind of tab. Row for sets that, you see in, the shell now as, a. Result of that it doesn't really make sense to put your back button up in the window, caption, area anymore when you're running in that tab environment, because kind of what tab, is the back. Button controlling, and so the, system is moving. To people putting the back button in their own app but we wanted to make that still be very easy for you so instead of calling that shell API to draw the back button you can just use an a view and it'll have a back button by default and. If for some reason you navigate, doesn't work for you we're also making a button, style available, that, matches. That and has the same exact sizing, and so forth so, that no matter what. Type of app design. You have you, can get a standard, way to have the back button shown that's consistent, across apps and they laid out nicely and consistently. So. That's, your back button support. So. I, think those are actually you know actually there's one thing I wanted to show in a demo that is not covered there. Which. Is around, oh. My. Goodness will it turn off sounds. Or. Are you guys are going to kill me all. Right I just restart it thankfully don't persist that setting. Alright. So. Here's the the nav you and you know it has the different modes, you know we talked about before one, of the things I want there's the top navigation mode. Here. One, of the things this app actually shows you you can bed nav use inside your app they don't have to just be the top-level navigation of the overall lap and one, of the reasons you might want to do that is if you have a tab pattern, you want to have a lot of people say hey, Paul how do we do tabs in our app and the, answer is navigation, view is a great way to get a tab pattern in your app and so, you.
Hear Here I've shown that and I can just you know arrow and just like tabs in win32, or wherever you, can arrow between them and it'll it'll update the tab underneath. It and to. Get that behavior all you have to do is you have to set selection follows, focus enabled, so ordinarily when you change phone, just in the navigation. View it doesn't, navigate. There just moves the focus around but, if you want to have it have that behavior navigates. Just by changing focus that's, just a property set on it and that really gives you exactly, you know the tab behavior, that you know and would like and so you can use this to get tabs in your apt as well. All. Right. Out. So this is all about navigation inside, your app but, a lot of people have, also navigation, outside their app so there's a couple other sessions, tomorrow that you may want to attend that talk, more about new. Windowing API is for. Navigation, you know outside of your one app window and also the set stalk which. We'll talk more about that topic with the back button and kind. Of what you can do with sets and the control you can have to open new windows in tabs and so forth with, the sets feature all right so. That's navigation. Commanding. We've, really been spending a lot of time thing about commanding, how we can help you have the best commanding, solution. In your apps for, users one, of the things we found is, that a lot of people, want, expose commands, in multiple. UX, surfaces, in their app for, example in that lighting. Demo app you. Could right-click on those lights to go and modify them but, those same commands were also exposed on little hover buttons and they're, also exposed on swipe and, users. Really like that they like to be able to find commands in all, the ways that are natural to them and they, expect, this. App didn't have them but you might even have a toolbar, menu bar at the top of the app with commands, you might have search in your app that has commands, often. You have the same commands exposed in lots and lots and lots of places and while, that's great for users it can be tedious for the developer, because. You end up having to write the, same view code over and over and over again like you had to write the word delete three times and refer, to the Delete icon three, times and get, the right tool, tip three times and so forth and so we really wanted to make this much more streamline, to help you create.
These Apps that expose commands in all the places and all the ways that your users want you to have them and so, to. Help you with that we've introduced UI command, so UI command. Bundles. Together all the kind of UI information, around a command its label its icon its access keys its keyboard shortcut, it's tool tip string and so forth so you can define it once and your resources and then, every place where you want to show that command you can just refer to it so in your menu flyout in a button in a swipe item, and so on and so forth and all, the different command, controls, that we have surfaces. Will present it in the appropriate way and so, the swipe control. Will show, the icon, with the label and so forth in the right way the menu fly it will show in the right way etc but, you could just define it once this really should streamline make it a lot easier for you to manage commanding, in a rich way in your application, so we're really excited about this improvement. And. To make it even easier for you we're. Adding, a standard, UI command. It. Turns out a lot of apps we use literally, the same exact like, have delete command have the Print command have saved have moved have, share and, why. Should every developer have to go and write. Those strings into their code and localize, those strings for other languages they want to bring their app to and find the right icon for them and so forth and so to help me that much simpler for you introducing, the standard UI command, it basically, encapsulates it has a library, of a lot of the most common commands that we see app authors use over and over and over again and all, you have to provide then is the actual implementation of the command and so, if you're an mb vm developer, you, can use the standard UI command you, say kind equals delete if it's the delete one you want for example and, then all you have to do is pass your relay, command to it and, that'll. Handle all the UI aspects. Of it for you all right. Alternately. You can explicitly, provide, the execute requested and can't execute requested, so, we think UI command, and standard UI command will really make it a lot easier for you to expose your commands in your app and all the different surfaces you want speaking. Of surfaces. We, want to have some more better surfaces, for you to expose your commands and one of the ones that we're bringing to. The uwp this might be one of your finally moments is the menu bar so, yes there's a menu bar brought, into fluent we're a very inclusive design, system, very inclusive platform, and we want to have all the UI patterns, supported, that you care about and so it's, a great menu bar implementation, it, has all the interactions. You'd expect with arrow keys and alt keys and, all that kind of stuff, but it also has nice modern, styling. And animation, shadows. With depth and acrylic, and all that kind of stuff so really, great menu bar implementation. And of, course you. Know simple API to it, and of course you can use the UI commands, with it and it also reuses menu flyouts so if you ever have a menu fly out for a context menu in your app and you also have the menu bar you can literally reuse that same menu flyout you know code so it's very very, easy for, you.
Another. UI. Control. That we're bringing into the system is command bar flyout and if, you've ever selected. Text, and mobile operating systems if you ever use Microsoft, Office you're, very familiar with the idea of having a little contextual, toolbar that appears, around the selection proactively, to let you get some commands and so now we have a standard control. For that in the platform. And it's connected. Into text, controls for free for you and I'd like to and. It's very kind of flexible it can have not just a little, list of commands but an expanded, mode with with a fuller set of commands sort of subsuming, what, a menu flyout, used to do and I'd like to demo it for you and. One. Of the things I'll say about our demos is that I'm showing you the latest and, greatest, bits, literally. If. You look down here in the corner I don't you've ever seen internal Microsoft, builds but this, is literally the build from our team's branch from. May 2nd, so it's like very very fresh, bits and so there might be some bugs, because, we're still developing this but I wanted to show it to you and let, you have kind of the first first, see of real code working. So. Let's. See so what I'm gonna do first I'm gonna go show here yeah if I go to rename something. If, I go and select that. Word floor you'll, see now there's cut, copy paste so I don't have to press, and hold with touch anymore to, get to those commands and wait for context menu to come up just simply selecting, with touch will give me those standard text commands that's one common usage of this and it's built into the text controls the developer didn't have to do anything to get that. But. You can do more, one. Of the things that this app does when, you're customizing, a lamp. Is. They have a fun little feature where you can do, an engraving so you can ask, the lamp maker to you know put an engraving on on the lamp because you're giving it as a gift so maybe I'm gonna write happy.
Birthday. Sabrina. My sister, and. The same two giving her this lamp and I if, I select, this text here, I'll. Also get that command flyout, okay with mouse and here it has even more commands in it it has bold, it, has italic, it's not just cut copy paste rich. Text boxes, were by default building in all those rich text commands like bold and italic into that toolbar, but, you can actually take it further and extend. It and put whatever you need to put in it so if you have some medical. Application. You want to put medical reference commands. If you have artificial intelligence and, you're taking, advantage of AI services, and doing text processing and have things you want to go promote to the user you can easily use this control to do that and so we think it's a great new addition to the, family of commanding, services. That. We expose for you it's. Built into all these controls by default you, can customize, it, and. Use, in other cases the. API - it is very familiar to anyone who's using the command bar before there's, a primary list of commands that go in the toolbar part and there's a secondary, items, list, that goes in the menu. Part. Oh, I didn't show the animation, but that's, alright, when. You click on a little dot, dot, it'll expand and collapse so, if you select text it might be in that minified, mode but you can click. The dot dot dot to expand, or. You. Know what I'll show it. Here. We go. Let's. See if I can. Let. Me get this up and running. Ocean, wanna make sure you understand this primary, mission of the secondary commands. There. We go. Let's. Go create a lamp. Alright oops. Yeah so when. On Selection, it just. Pops up in this kind of collapsed mode but. You can click here to expand, it and you get that full you know the secondary list kind of like a command bar does alternatively. If I right clicked it. Would automatically open it in that expanded, State okay so. Proactively. It'll open in the minified State just selecting, but right clicking or pressing and holding it'll, right away open in the expanded, State so it really subsumes, the the, functionality, of the context menu in that way. Alright. Hope that makes sense. You. Can customize the command bar on a text. Control if you want there's, a new selection, flyout, property, on the text controls and so you can use that to override. The the default command bar with a custom one with your own commands, and. In. Terms of using it versus other controls since people ask about this. You. Know it's great for, text selection on canvas, object selection, any, kind of canvas like that where you want to proactively, show commands, great control to use if, you have lists we, still recommend you follow the standard, pattern, practice. That's there of having the, context, menu and, the swipe and the hover buttons, because. Pop-ups, can kind of get, in the way of navigation. With keyboarding, and so you want to be thoughtful about how you know how you when you use that but. To implement that context menu you you can use the command bar flyout, if you'd like because, it does subsume the the, menu flyouts capabilities, just put all your stuff in the secondary list for example, alright. So. That's. Okay. And one last thing on commanding, is we've, heard a lot of requests for more types of buttons you, know hey five rich toolbars in rich commanding, there's not just simple buttons and toggle buttons but people want drop-down, button so that's a button that you click on and it gives you a little drop-down you, could have do that today but you didn't have the visualization that showed you the little arrow and so users didn't know that there are more commands hiding in your app and so now you have that with.
Split Button which. Has clicking. On the left part of it just does an action and clicking on the right part of it gives, you that menu with the other options so you've, probably seen that often in in in, you eyes like highlighting. You eyes and even. A toggle split, button where the left part operates as a toggle to, for example turn on and off bullet lists, and the right thing. Opens a flyout they'll let you change the type of bulleted list all right so we now support you, know all the full range of button, types that that a lot of apps would like to have in. A nice way so, that's. Commanding, alright. Collections. So, apps you know there's navigating, around them there's acting on things in them and one of the most common things people do in apps is present, a lot you know data collections. Of data from from databases to. Users and. Yes. We finally have a data grid for uwp available, now it's been a long-standing ask. And. It's. A really. Nice implementation. With all the features you expect to, ability to edit data inline reorder. Columns resize, columns, etc. And, it's. Actually, the, API - it is very familiar to the, Silverlight data grid API so. If you've used that before you'll immediately, know how to use this one and be able to easily port code over to it but, the UI has been refreshed it, has touch and pen support, and nice panning, and all that kind of stuff and. We're actually shipping it you know we know people really want this you, know really badly and so we're just shipping it right right away it's in preview now but we've actually contributed. To the uwp so the windows community, toolkit so you can just start using it right away and it's actually open source manage. C sharp code so if you want to contribute to it or make additions, you're. Welcome to do that now, because we've contributed that code, so. There's, a data grid. We. Also have a tree view this is just came out in the Windows Update that just went out this past month into. The 1803, SDK, and not. Only is there treaty but will continue to improve the tree view and so, in, this coming update. You'll see there's better multi-select and drag-and-drop support above. And beyond what's already there and there's good, data binding and templating support and I want to show you that for, a moment. So. Here's how you can use the tree view of data binding, you, actually can in. Your data template you can directly return tree view items that you want to show and we won't wrap them we won't mess with them we'll just like directly insert those and show, those and so you can directly, control the exact tree view item you know presentation, that you want that way and, we.
And If you want to have hierarchy, you. Can just make, have an item source on that, tree view item that kind, of gives us the children then we'll go and walk those and generate those and so we think a pretty good and simple model, that allows you to, to. Use. Tree view of data binding in a nice way it's, a little different than people who are familiar with hierarchical data templates, and some stuff that use to exist in WPF but. We think you'll find this is a really good model and we welcome you, know questions and feedback, and stuff on that. And. Then finally it's also refresh container, to let you pull to refresh. Which. Works, not only with touch but also attract Pat gestures, so. You, know almost, everyone has either trackpad, or touch screen these days I'm certainly on laptops and so, it's a great addition for you to have that support for that pattern and I, didn't want to demo a couple things about that I. Already. Showed you the tree control earlier, but. On the Refresh. Container, one, thing I just wanted to point out. That. We've done so here, you. Know kind, of using it it. Can also use with my trackpad so, I'm pointing on my trackpad not would touch it has, a visual, you know it has a full visualization, system so that you, can tell when you've crossed the threshold to. Refresh, etc. And also. Supports a lot of customization so instead, of the usual refresh, glyph, here the developer did a fun little Sun and, so a little Sun is coming out and then, it's up blinks, let you know okay past the threshold of refreshing, and then, I let go and it'll spin and refresh alright so it's a really nice control, has flexibility. For you to customize it. And. You should go check, it out and take advantage of it, if. It's, useful to you. Alright. And then, finally forms in data input in the commanding in the co in the control space we've been doing a lot of investment to help, you there. One common, request has been data validation, and so we now have great, data validation, support built into the controls they, can actually present the. Validation, errors in two ways either an, inline, mode that appears below or a compact, mode that appears on the side and. It's. Compatible. With and works with the ways you've done data validation, in the past net. And. So you'll find it's very natural and tube to use and, I'm gonna do a very quick demo of it but I know that there's a talk tomorrow, that Ryan Demopoulos is giving, on lob, app development with actually you know into a lot of depth on all the richness you can do a data validation but, I'm gonna show you one quick thing. With it which, is in my forms, and buying this lamp for my sister now so here's the. Kind of validation, below the presentation, of it so. Can be smart about you. Know when you want to process, that if you want to handle it I can submit if you want to handle it after keystrokes, you can kind of decide how you want to do that that, was the validation, error below, here. On zip code we showed it being on the side so, that's the compact mode and if you choose the compact, mode then. On hover, you'll. Get a tooltip with, the actual error message so you can decide which, which style, makes sense for your app and we support we support those styles and if you want to even further there's, a lot of templating, support, for you to go. Wild and configure, those even further but. That's data. Validation. We've, also not support headers, on the side in forums and so sometimes people want headers above so that you'll want headers on the side so, that's inherently supported, you. Can kind of depend on your layout you can fit more fields. In the same space with headers on the side sometimes and then with headers on top so you've that you have the choice of how you want to do it also. In form space we're. Making combo fixing, combo boxes to open larger. So you can now actually fit all twelve months at once. In. A combo box, blast. From the past but. We're. Happy to, improve. That and. And you can now also edit combo boxes have. Editable combo boxes and and we've actually done a nice job of making sure they work well regardless, of the input type you're using even if using pen, input to do the inline handwriting, or. Mouse. Or touch that, kind of works with all those modalities. And. It's pretty easy and straightforward to kind of go add that to your combo box. And. But. Beyond you know some of those things where things are kind of bringing some things back then you may be expected, one thing is kind of pretty new that's now supported, our content. Links which. Lets you do app mentions, and so. If you have a scenario where people, maybe want to refer, to other people, or refer to locations. In in, text areas where, they start typing an at and then it kind of completes that person's name or that location name that's now inherently supported, in the platform, it plugs right into the people API.
So If windows and the Maps API is in Windows to give you all those locations so you don't have to you, know for you it's just a few lines of code to add that and you get that power of the platform and I, think, that's one that's worth seeing, in person so. I'm going to go, switch over to that so let you see it. I'm, gonna go to the. Sample. Gallery, here. Wouldn't. Go to rich edit box, inserting. The sample here I can turn, on people. Completion, or places completion I'm just gonna do places. So that my, address book isn't fun, stage, but. Um you. Know. Let's. Check out, the. You. Know. Safeco. Field is, that oh. You. Know what my. Demos not gonna work them not on the network so but. Believe. Me that you can actually have. Completion. And rather than try and join the network now that. I see that it's down I won't. Show, that but, it. Does work but I will show you the editable combo box just, in case people don't realize, what that is it's a combo, box where not only is there a preset, list of options you can pick from so, like this app here it has a bunch of rooms I could pick from but if I wanted to create, a different room instead, of having to not be able to do it at all I can just type you know green house and I've. Created the green house spelled. Alright, so that's an edible there you go in there's edible combo box. So. That's a whole bunch of improvements around, kind of forms and data input so we thought about fundamentals, we talked about controls, and patterns and now, I want to let you know about some of the new things around developer productivity that we're adding to the platform hopefully, those things I showed you already will, improve your productivity but there's a few additional. Investments, really just focused, on developer productivity, specifically. One. Of the places we've been trying to invest in is around improving binding, for you and we really want to make X bind a great. Solution, for all your binding needs and flesh, out the full set of scenarios, that people want binding. To work for and so, X, by networks in styles so, I think you guys will like that. X. Fine works in control templates, and one things that's cool about that is they take the, benefits. That X bind and. Use that in this context, you can now have function, binding in two-way binding for example in control templates. We've. Also, support. I notify. Property change if you have if your binding to a method, you can now fire I Pro property. I notify. Property changes, to. Have binding work for those cases as well and. We've. Also so, that eliminates. The need for multi binding and other converters she, just use X bind with functions to, meet those needs. And, the. Last point I wanted to make was that we're, gonna have automatic null checks for all X bind use cases so some, of those gnarly surprise, crashes, will hopefully go, away for you and make, it a lot more usable and easy for you. Also. Just in terms of sam'l improvements beyond the binding space we're, supporting nullable types that's. Been a long-standing ask, that. I know about for a lot of cases, and, have. I service providers from markup extensions, and so this. Will let you bring your custom, markup extensions, from WPF, and Silverlight and start, to bring those to either BPM or Windows 10 ml and use those so. We think you, know these improvements, around markup, and binding will really help you be more productive as, developers, help, you have, the model. And architecture, that you want to have in your apps and.
Help You bring code forward, that you've written in the past. So. The, other developer productivity improvement, you know I think of this way that we've done is windows UI library, Kevin, announced that this morning in the keynote and. Really. It's the new way to get native uwp fluent, controls and styles it'll, be a new get package and, it's. The same controls, that we use at Microsoft, the same ones that ship in the platform, it's literally the same source code base but, packaged, up and shipped to you as a new get package. So. That you can use it in market right away you, know as we release them on the current os's, that are in market, you don't to wait for people, to ramp up on the new OS version. It's backward-compatible, this. Is first version we backward compatible to the anniversary update. And. You'll. See that the features that are in it work, on, that scale of OS versions sometimes, there'll be some things that gracefully, degrade because. Maybe an underlying platform capability. Wasn't, there to do a certain visual effect or a certain animation or something and so it'll, just scale, back on that OS but from a developer model, perspective as you use the API you should find that it kind of just works for you the way you'd expect it to work, and. It'll. Have a bunch, of the new popular, controls. We've been adding in the you know last year to the tree view nav you menu. Bar and again the fluent styles, and and density, changes for, all the controls. Since. The windows UI library. And. Then finally you know one of the things we've been working to invest in is just a lot better interoperability. Between. Sam'l. And other technologies, that you have to use other languages, and. So forth and so there are a few investments that we've been making there one. Is it made a bunch of webview improvements, to help you blend web content, a lot of apps have to blend, web content, into. Their app and sometimes you don't have total control over. That, content, from that web server and so, now there's a feature that allows you to intercept, and provide, a response HTTP, requests, for the web content and so for example this. Example from Microsoft Store when. It's run in the web browser. They. Have one set of styling, and they've, decided when it's run now my slide really doesn't show this does it but it doesn't my computer so, the contrast ratio is weird but they've different styling, on the right-hand side where there's a gray background you'll, see some of the icons have updated as well. And, so, you can provide different styling, a different CSS file for the same as that web content, to make it fit into your, apps look and feel okay. And. You can also run web view out of proc now, so that'll, also help you in web blending kind of scenarios. Another. Improvement, that we've made and and I'm not going to go too depth on it because Mike harsh. Went, into more depth on it and his talk but is the UWP. Sam'l hosting, the sam'l islands work that's, going into preview, and that'll, allow you to start using islands. Of sam'l, content inside your existing apps so. That over time you. Can grow, have more and more eventually, all your app UI hopefully unmodern, you know up-to-date UI, technologies. But you can do that piece by piece you have to do it all at once. What, about sam'l standard, I've got a lot of questions about this and so. The. Goal of sam'l standard, is to, improve. Dialect, alignment, between Windows 10 sam'l, and xamarin forms sam'l, and there's. A set of improvements, that that the teams have been working together to to, bring, to you as part of that effort. That, I'm I'm happy to tell you about and then there'll be more information about them in the same informs, talk tomorrow to one. Is visual state manager will, be in xamarin forms three oh so. That will help you bring, more alignment in the dialects there there's, a preview. Set of demo standard tags things. Around text, and buttons and certain. Panels where, they're just the different names for the same concept. In the same thing and so, those are going to be aligned in, xamarin, forms three one and. Then x bind will be coming to Zemin forms later this year also so there's. More there's work going on to try to align these dialects, and we, look forward to hearing the feedback from you of other pain points you have if you're trying to use xamarin, forms and Windows 10 sam'l so we can work to align those things better for you also, so. That's an update on sam'l, standard and we welcome you giving, feedback to the teams directly, actually, to, Windows.
10 Sam'l team and the Zemin forms team about pain. Points that you have through, the standard feedback, channels. That you use. Another. Thing we've had is something called zamel direct. Unless. Is anyone here author middleware,