31
Desktop development with WPF Pete Brown | @pete_brown | http://10rem.net Windows Developer Platform Evangelist Microsoft 2-002

Desktop development with WPF

  • Upload
    tirzah

  • View
    810

  • Download
    3

Embed Size (px)

DESCRIPTION

Desktop development with WPF. Pete Brown | @pete_brown | http://10rem.net Windows Developer Platform Evangelist Microsoft 2-002. Windows 8 desktop opportunities. The coming wave An explosion of new desktop and laptop PCs with touch screens - PowerPoint PPT Presentation

Citation preview

Page 1: Desktop development with WPF

Desktop development with WPFPete Brown | @pete_brown | http://10rem.netWindows Developer Platform EvangelistMicrosoft2-002

Page 2: Desktop development with WPF

Windows 8 desktop opportunitiesThe coming waveAn explosion of new desktop and laptop PCs with touch screensMore tablets and hybrid portable x86/64 devices supporting both desktop and Windows Store app models

Why desktopRun on Windows 7 as well as Windows 8Access potentially unsafe APIs and devicesIntegrate mixed UI code (e.g., WPF hosting Windows Forms)

Page 3: Desktop development with WPF

Desktop development technologiesWPF.NET

Windows Forms.NET

C++/Win32Native

Visual Studio 2012

WPF, Windows Forms, C++ support in Visual Studio Express 2012 for Desktop Silverlight support in Visual Studio Express 2012 for Web

Silverlight

Page 4: Desktop development with WPF

New Win32/COM API categoriesAssessment Execution Engine (AXE)

Compression API (MSZIP, XPRESS, XPRESS_HUFF, LZMS)

Data deduplication (backup/restore)

Direct composition

Direct manipulation

DirectX Math Help API iSCSI Target API (WMI)

Operation Recorder (Windows prefetch)

Packaging and deployment for Windows Store apps

SMB management

User access logging

User state management

Web sockets Windows Connection Manager

Windows Storage Management

XAudio2 XInput

Page 5: Desktop development with WPF

New Windows 8 desktop APIsAccSetRunningUtilityState AddDllDirectory AddPointerInteractionContext AddResourceAttributeAce AddScopedPolicyIDAce AddVirtualDiskParent AsyncActionCompletedHandler AuthzFreeCentralAccessPolicyCache AuthzInitializeCompoundContext AuthzInitializeRemoteResourceManager AuthzInitializeResourceManagerEx AuthzModifyClaims AuthzModifySids AuthzRegisterCapChangeNotification AuthzSetAppContainerInformation AuthzUnregisterCapChangeNotification BCryptKeyDerivation BreakMirrorVirtualDisk BufferPointerPacketsInteractionContext CertIsStrongHashToSign CheckTokenCapability CheckTokenMembershipEx ClosePackageInfo CoAllowUnmarshalerCLSID CopyFile2 CopyHelperAttribute CopyRepairInfo CopyRootCauseInfo CoCreateInstanceFromApp CoDecrementMTAUsage CoEnterApplicationThreadLifetimeLoop CoGetApplicationThreadReference CoHandlePriorityEventsFromMessagePump CoIncrementMTAUsage CoRegisterChannelHook CoWaitForMultipleObjects CoSetMessageDispatcher CreateAppContainerProfile CreateFile2 CreateInteractionContext CreateRandomAccessStreamOnFile CreateRandomAccessStreamOverStream CreateStreamOverRandomAccessStream CryptCATAdminAcquireContext2 CryptCATAdminCalcHashFromFileHandle2 CryptSIPGetCaps D2D1CreateDevice D2D1CreateDeviceContext DCompositionCreateDevice DCompositionCreateSurfaceHandle DeleteAppContainerProfile DeleteConnectedIdentity DeleteSynchronizationBarrier DeleteVirtualDiskMetadata DeriveAppContainerSidFromAppContainerName DestroyInteractionContext DnsCancelQuery DnsQueryEx DwmRenderGesture

DwmShowContact DwmTetherContact DwmTransitionOwnedWindow DXGIGetDebugInterface EapPeerGetConfigBlobAndUserBlob EnableMouseInPointer EngineAdapterNotifyPowerChange EnterSynchronizationBarrier EnumerateVirtualDiskMetadata EvaluateProximityToPolygon EvaluateProximityToRect EventSetInformation FreeHelperAttributes FreeRepairInfoExs FreeRepairInfos FreeRootCauseInfos FreeUiInfo

FwpmConnectionCreateEnumHandle0 FwpmConnectionDestroyEnumHandle0 FwpmConnectionEnum0 FwpmConnectionGetById0 FwpmConnectionGetSecurityInfo0 FwpmConnectionSetSecurityInfo0 FwpmConnectionSubscribe0 FwpmConnectionSubscriptionsGet0 FwpmConnectionUnsubscribe0 FwpmIPsecTunnelAdd2 FwpmNetEventEnum2 FwpmNetEventSubscribe1 FwpmProviderContextAdd2 FwpmProviderContextEnum2 FwpmProviderContextGetById2 FwpmProviderContextGetByKey2 FwpmvSwitchEventsGetSecurityInfo0 FwpmvSwitchEventsSetSecurityInfo0 FwpmvSwitchEventSubscribe0 FwpmvSwitchEventUnsubscribe0 GetAddrInfoExCancel GetAddrInfoExOverlappedResult GetAppContainerFolderPath GetAppContainerNamedObjectPath GetAppContainerRegistryLocation GetCertificateFromCred GetCredentialKey GetCrossSlideParameterInteractionContext GetCurrentInputMessageSource GetCurrentInputMessageSource GetCurrentPackageFamilyName GetCurrentPackageFullName GetCurrentPackageId GetCurrentPackageInfo GetCurrentPackagePath GetFirmwareType GetInertiaParameterInteractionContext GetInteractionConfigurationInteractionContext GetIpNetworkConnectionBandwidthEstimates GetMemoryErrorHandlingCapabilities GetMouseWheelParameterInteractionContext

GetOverlappedResultEx GetPackageFamilyName GetPackageFullName GetPackageId GetPackageInfo GetPackagePath GetPackagesByPackageFamily GetPointerCursorId GetPointerDevice GetPointerDeviceCursors GetPointerDeviceProperties GetPointerDeviceRects GetPointerDevices GetPointerFrameInfo GetPointerFrameInfoHistory GetPointerFramePenInfo GetPointerFramePenInfoHistory GetPointerFrameTouchInfo GetPointerFrameTouchInfoHistory GetPointerInfo GetPointerInfoHistory GetPointerPenInfo GetPointerPenInfoHistory GetPointerTouchInfo GetPointerTouchInfoHistory GetPointerType GetProcessInformation GetProcessMitigationPolicy GetProcessReference GetPropertyInteractionContext GetRawPointerDeviceData GetRestrictedErrorInfo GetScaleFactorForDevice GetServiceAccountPassword GetStateInteractionContext GetSystemTimePreciseAsFileTime GetThemeAnimationProperty GetThemeAnimationTransform GetThemeTimingFunction GetThreadInformation GetUnpredictedMessagePos GetVirtualDiskMetadata GetWindowFeedbackSetting HSTRING_UserFree HSTRING_UserFree64 HSTRING_UserMarshal HSTRING_UserMarshal64 HSTRING_UserSize HSTRING_UserSize64 HSTRING_UserUnmarshal HSTRING_UserUnmarshal64 HttpPrepareUrl IAccessibilityDockingService IAccessibilityDockingServiceCallback IAccessibleHostingElementProviders IAccessibleWindowlessControl IAccessibleWindowlessSite IActivationFactory IAdvancedMediaCapture

IAdvancedMediaCaptureInitializationSettings IAdvancedMediaCaptureSettings IAgileObject IAnnotationProvider IApartmentShutdown IApplicationActivationManager IApplicationDesignModeSettings IAppVisibility IAppxBlockMapBlock IAppxBlockMapBlocksEnumerator IAppxBlockMapFile IAppxBlockMapFilesEnumerator IAppxBlockMapReader IAppxFactory IAppxFile IAppxFilesEnumerator IAppxManifestApplication IAppxManifestApplicationsEnumerator IAppxManifestDeviceCapabilitiesEnumerator IAppxManifestPackageDependenciesEnumerator IAppxManifestPackageDependency IAppxManifestPackageId IAppxManifestProperties IAppxManifestReader IAppxManifestResourcesEnumerator IAppxPackageReader IAppxPackageWriter IAsyncAction IAsyncActionProgressHandler<TProgress> IAsyncActionWithProgress<TProgress> IAsyncActionWithProgressCompletedHandler<TProgress> IAsyncInfo IAsyncOperation<TResult> IAsyncOperationCompletedHandler<TResult> IAsyncOperationProgressHandler IAsyncOperationWithProgress IAsyncOperationWithProgressCompletedHandler<TResult, TProgress> IAudioClient2 IAudioEndpointOffloadStreamMute IAudioLfxControl IBuffer IBufferByteAccess ICatalog ICatalogRead ICatalogReadWriteLock IClosable IConnectedIdentityProvider IConnectedUser IConnectedUserStore IConnectionBrokerClient IConnectionBrokerRequest ICoreApplication ICoreApplicationExit ICoreApplicationInitialization ICoreApplicationView ICoreImmersiveApplication ICredentialProviderCredential2

ICredentialProviderCredentialEvents2 ICredentialProviderCredentialWithFieldOptions ICredentialProviderSetUserArray ICredentialProviderUser ICredentialProviderUserArray ID2D1AnalysisTransform ID2D1Bitmap1 ID2D1BlendTransform ID2D1BorderTransform ID2D1ColorContext ID2D1CommandList ID2D1CommandSink ID2D1ComputeInfo ID2D1ComputeTransform ID2D1ConcreteTransform ID2D1Device ID2D1DeviceContext ID2D1Effect ID2D1EffectContext ID2D1EffectImpl ID2D1Factory1 ID2D1GpuRenderInfo ID2D1GpuTransform ID2D1GradientStopCollection1 ID2D1Image ID2D1ImageBrush ID2D1OffsetTransform ID2D1PathGeometry1 ID2D1Properties ID2D1RenderInfo ID2D1ResourceTexture ID2D1SourceTransform ID2D1StrokeStyle1 ID2D1Transform ID2D1TransformGraph ID2D1TransformNode ID2D1VertexBuffer ID3D11AuthenticatedChannel ID3D11BlendState1 ID3D11CryptoSession ID3D11Device1 ID3D11DeviceContext1 ID3D11RasterizerState1 ID3D11RefDefaultTrackingOptions ID3D11RefTrackingOptions ID3D11ShaderTrace ID3D11ShaderTraceFactory ID3D11TracingDevice ID3D11VideoContext ID3D11VideoDecoder ID3D11VideoDecoderOutputView ID3D11VideoDevice ID3D11VideoProcessor ID3D11VideoProcessorEnumerator ID3D11VideoProcessorInputView ID3D11VideoProcessorOutputView ID3DDeviceContextState ID3DUserDefinedAnnotation IDataObjectAsyncCapability

IDataObjectProvider IDataTransferManagerInterop IDCompositionAnimation IDCompositionClip IDCompositionDevice IDCompositionEffect IDCompositionEffectGroup IDCompositionMatrixTransform IDCompositionMatrixTransform3D IDCompositionRectangleClip IDCompositionRotateTransform IDCompositionRotateTransform3D IDCompositionScaleTransform IDCompositionScaleTransform3D IDCompositionSkewTransform IDCompositionSurface IDCompositionTarget IDCompositionTransform IDCompositionTransform3D IDCompositionTranslateTransform IDCompositionTranslateTransform3D IDCompositionVirtualSurface IDCompositionVisual IDefaultFolderMenuInitialize IDesktopWallpaper IDirectManipulationCompositor IDirectManipulationContactHandler IDirectManipulationContent IDirectManipulationManager IDirectManipulationPrimaryContent IDirectManipulationUpdateHandler IDirectManipulationUpdateManager IDirectManipulationViewport IDirectManipulationViewportEventHandler IDragProvider IDropTargetProvider IDXGIAdapter2 IDXGIDebug IDXGIDevice2 IDXGIDisplayControl IDXGIFactory2 IDXGIInfoQueue IDXGIOutput1 IDXGIOutputDuplication IDXGIResource1 IDXGISurface2 IDXGISwapChain1 IEffectivePermission2 IEnumSpellingError IErrorReportingSettings IEvent IEventCallback IEventHandler<T> IExecuteCommandApplicationHostEnvironment IExecuteCommandHost IFrameworkInputPane IFrameworkInputPaneHandler IFsrmClassificationManager2 IHandlerActivationHost

IHandlerInfo IHardwareAudioEngineBase IHelpFilter IHelpKeyValuePair IIdentityStore2 IImePlugInDictDictionaryList IInitializeWithWindow IInputPanelConfiguration IInputPanelInvocationConfiguration IInputStream IInspectable IIterable<T> IIterator<T> IkeextSaEnum2 IkeextSaGetById2 IKeyValuePair<K, V> IKeyword IKeywordCollection ILocationPermissions ILocationPower IMap<K, V> IMapChangedEventArgs<K> IMapView<K, V> IMbnDeviceService IMbnDeviceServicesContext IMbnDeviceServicesEvents IMbnDeviceServicesManager IMbnMultiCarrier IMbnMultiCarrierEvents IMF2DBuffer2 IMFByteStreamCacheControl2 IMFByteStreamProxyClassFactory IMFByteStreamTimeSeek IMFByteStreamTrident IMFCaptureEngine IMFCaptureEngineClassFactory IMFCaptureEngineOnEventCallback IMFCaptureEngineOnSampleCallback IMFCapturePhotoSink IMFCapturePreviewSink IMFCaptureRecordSink IMFCaptureSink IMFCaptureSource IMFDXGIBuffer IMFDXGIDeviceManager IMFImageSharingEngine IMFMediaEngine IMFMediaEngineClassFactory IMFMediaEngineEx IMFMediaEngineExtension IMFMediaEngineNotify IMFMediaEngineProtectedContent IMFMediaEngineSrcElements IMFMediaError IMFMediaSharingEngine IMFMediaSourceEx IMFMediaTimeRange

Page 6: Desktop development with WPF

New Windows 8 desktop APIsIMFNetResourceFilter IMFPluginControl2 IMFProtectedEnvironmentAccess IMFRealTimeClientEx IMFSampleOutputStream IMFSeekInfo IMFSharingEngineClassFactory IMFSignedLibrary IMFSinkWriterEx IMFSourceReaderEx IMFSystemId IMFVideoProcessorControl IMFVideoSampleAllocatorEx ImmDisableLegacyIME IMsRdpClient8 IMsRdpClientAdvancedSettings8 IndexException INetFwRule3 INetworkConnectCost INetworkConnectionCostEvents INetworkCostManager INetworkCostManagerEvents InitializeSynchronizationBarrier InitializeTouchInjection InjectTouchInput INoMarshal InterlockedAddNoFence InterlockedAddNoFence64 InterlockedAnd16NoFence InterlockedAnd64NoFence InterlockedAnd8NoFence InterlockedAndNoFence InterlockedBitTestAndComplement64 InterlockedBitTestAndResetAcquire InterlockedBitTestAndResetRelease InterlockedBitTestAndSetAcquire InterlockedBitTestAndSetRelease InterlockedCompareExchange128 InterlockedCompareExchange16 InterlockedCompareExchange16Acquire InterlockedCompareExchange16NoFence InterlockedCompareExchange16Release InterlockedCompareExchangeNoFence InterlockedCompareExchangeNoFence64 InterlockedCompareExchangePointerNoFence InterlockedDecrement16 InterlockedDecrement16Acquire InterlockedDecrement16NoFence InterlockedDecrement16Release InterlockedDecrementNoFence InterlockedDecrementNoFence64 InterlockedExchange16Acquire InterlockedExchange16NoFence InterlockedExchange8 InterlockedExchangeAddNoFence InterlockedExchangeAddNoFence64 InterlockedExchangeNoFence InterlockedExchangeNoFence64 InterlockedExchangePointerNoFence

InterlockedIncrement16 InterlockedIncrement16Acquire InterlockedIncrement16NoFence InterlockedIncrement16Release InterlockedIncrementNoFence InterlockedIncrementNoFence64 InterlockedOr16NoFence InterlockedOr64NoFence InterlockedOr8NoFence InterlockedOrNoFence InterlockedPushListSListEx InterlockedXor16NoFence InterlockedXor64NoFence InterlockedXor8NoFence InterlockedXorNoFence IObjectModelProvider IObservableMap<K, V> IObservableVector<T> IOptionDescription IOutputStream IPackageDebugSettings IPackageDebugSettings IPlaybackManager IPlaybackManagerEvents IPlayToControl IPlayToControllerClassFactory IPlayToManagerDirect IPlayToManagerInterop IPlayToReceiverClassFactory IPortableDeviceUnitsStream IPrintManagerInterop IPropertyValue IPropertyValueStatics IPsecKeyManagerAddAndRegister0 IPsecKeyManagerGetSecurityInfoByKey0 IPsecKeyManagerSetSecurityInfoByKey0 IPsecKeyManagersGet0 IPsecKeyManagerUnregisterAndDelete0 IPsecSaContextSubscribe0 IPsecSaContextSubscriptionsGet0 IPsecSaContextUnsubscribe0 IRandomAccessStream IRawElementProviderHostingAccessibles IRawElementProviderWindowlessSite IRDPViewerRenderingSurface IReference<T> IReferenceArray<T> IReferenceTracker IReferenceTrackerHost IReferenceTrackerManager IReferenceTrackerTarget IRemoteDesktopClient IRemoteDesktopClientActions IRemoteDesktopClientEvents IRemoteDesktopClientSettings IRestrictedErrorInfo IRichEditUiaInformation IRicheditUiaOverrides IRicheditWindowlessAccessibility

IRoMetaDataLocator IRoSimpleMetaDataBuilder ISearchableApplication ISearchManager2 ISecurityInformation4 IsImmersiveProcess IsMouseInPointerEnabled ISpellChecker ISpellCheckerChangedEventHandler ISpellCheckerFactory ISpellCheckProvider ISpellCheckProviderFactory ISpellingError ISpreadsheetItemProvider ISpreadsheetProvider IStylesProvider ISuspendingDeferral ISuspendingEventArgs ISuspendingOperation IsValidNLSVersion ITextDisplays ITextDocument2 ITextFont2 ITextHost2 ITextPara2 ITextProvider2 ITextRange2 ITextRow ITextSelection2 ITextServices2 ITextStory ITextStoryRanges2 ITextStrings ITfFnGetPreferredTouchKeyboardLayout ITfIntegratableCandidateListUIElement ITfFnSearchCandidateProvider ITfThreadMgr2 IThumbnailCachePrimer IThumbnailSettings ITopic ITopicCollection ITpmVirtualSmartCardManager ITpmVirtualSmartCardManagerStatusCallback ITraceRelogger ITransformProvider2 ItsPubPlugin2 ITypedEventHandler<TSender, TArgs> IUIAnimationInterpolator2 IUIAnimationLoopIterationChangeHandler2 IUIAnimationManager2 IUIAnimationManagerEventHandler2 IUIAnimationPrimitiveInterpolation IUIAnimationPriorityComparison2 IUIAnimationStoryboard2 IUIAnimationStoryboardEventHandler2 IUIAnimationTransition2 IUIAnimationTransitionFactory2 IUIAnimationTransitionLibrary2 IUIAnimationVariable2

IUIAnimationVariableChangeHandler2 IUIAnimationVariableCurveChangeHandler2 IUIAnimationVariableIntegerChangeHandler2 IUIAutomation2 IUIAutomationAnnotationPattern IUIAutomationDragPattern IUIAutomationDropTargetPattern IUIAutomationElement2 IUIAutomationObjectModelPattern IUIAutomationSpreadsheetItemPattern IUIAutomationSpreadsheetPattern IUIAutomationStylesPattern IUIAutomationTextChildPattern IUIAutomationTextPattern2 IUIAutomationTransformPattern2 IUIEventingManager IUIEventLogger IUIFramework2 IUPnPAsyncResult IUPnPServiceAsync IUPnPServiceDocumentAccess IUPnPServiceEnumProperty IUserDictionariesRegistrar IVector<T> IVectorChangedEventArgs IVectorView<T> IViewProvider IViewProviderFactory IVmApplicationHealthMonitor IWeakReference IWeakReferenceSource IWebApplicationAuthoringMode IWebApplicationHost IWebApplicationNavigationEvents IWebApplicationScriptEvents IWebApplicationUIEvents IWSDHttpAuthParameters IWTSBitmapRenderer IWTSBitmapRendererCallback IWTSBitmapRenderService IWTSPluginServiceProvider IWTSServerChannel IWTSServerChannelManager IWTSVirtualChannelCallback2 IXMLHTTPRequest2 IXMLHTTPRequest2Callback IXpsOMObjectFactory1 IXpsOMPackage1 IXpsOMPage1 LoadPackagedLibrary LsaGetAppliedCAPIDs LsaLookupSids2 MagGetFullscreenColorEffect MagGetFullscreenTransform MagGetInputTransform MagSetFullscreenColorEffect MagSetFullscreenTransform MagSetInputTransform MagShowSystemCursor

MapChangedEventHandler<K, V> MAPISendMailHelper MAPISendMailW MetaDataGetDispenser MFAllocateSerialWorkQueue MFBeginRegisterWorkQueueWithMMCSSEx MFCreate2DMediaBuffer MFCreateAC3MediaSink MFCreateADTSMediaSink MFCreateCaptureEngine MFCreateDXGIDeviceManager MFCreateDXGISurfaceBuffer MFCreateMediaBufferFromMediaType MFCreateMediaExtensionActivate MFCreateMFByteStreamOnStreamEx MFCreateMFByteStreamWrapper MFCreateMuxSink MFCreateMuxSinkActivate MFCreateStreamOnMFByteStream MFCreateStreamOnMFByteStreamEx MFCreateTranscodeTopologyFromByteStream MFCreateVideoSampleAllocatorEx MFGetAttributeString MFGetContentProtectionSystemCLSID MFGetWorkQueueMMCSSPriority MFLockDXGIDeviceManager MFLockSharedWorkQueue MFMapDX9FormatToDXGIFormat MFMapDXGIFormatToDX9Format MFPutWaitingWorkItem MFPutWorkItem2 MFPutWorkItemEx2 MFRegisterLocalByteStreamHandler MFRegisterLocalSchemeHandler MFRegisterPlatformWithMMCSS MFUnlockDXGIDeviceManager MFUnregisterPlatformFromMMCSS MI_Application_Close MI_Application_Initialize MI_Application_NewDeserializer MI_Application_NewDestinationOptions MI_Application_NewHostedProvider MI_Application_NewInstance MI_Application_NewInstanceFromClass MI_Application_NewOperationOptions MI_Application_NewParameterSet MI_Application_NewSerializer MI_Application_NewSession MI_Application_NewSubscriptionDeliveryOptions MI_Class_Clone MI_Class_Delete MI_Class_GetClassName MI_Class_GetClassQualifierSet MI_Class_GetElement MI_Class_GetElementAt MI_Class_GetElementCount MI_Class_GetMethod MI_Class_GetMethodAt MI_Class_GetMethodCount

MI_Class_GetNameSpace MI_Class_GetParentClass MI_Class_GetParentClassName MI_Class_GetServerName MI_Context_Canceled MI_Context_ConstructInstance MI_Context_ConstructParameters MI_Context_GetCustomOption MI_Context_GetCustomOptionAt MI_Context_GetCustomOptionCount MI_Context_GetLocale MI_Context_GetLocalSession MI_Context_GetNumberOption MI_Context_GetStringOption MI_Context_NewDynamicInstance MI_Context_NewInstance MI_Context_NewParameters MI_Context_PostCimError MI_Context_PostError MI_Context_PostIndication MI_Context_PostInstance MI_Context_PostResult MI_Context_PostResultWithError MI_Context_PostResultWithMessage MI_Context_PromptUser MI_Context_RefuseUnload MI_Context_RegisterCancel MI_Context_RequestUnload MI_Context_SetStringOption MI_Context_ShouldContinue MI_Context_ShouldProcess MI_Context_WriteCimError MI_Context_WriteDebug MI_Context_WriteError MI_Context_WriteMessage MI_Context_WriteProgress MI_Context_WriteStreamParameter MI_Context_WriteVerbose MI_Context_WriteWarning MI_Deserializer_Class_GetClassName MI_Deserializer_Class_GetParentClassName MI_Deserializer_Close MI_Deserializer_DeserializeClass MI_Deserializer_DeserializeInstance MI_Deserializer_Instance_GetClassName MI_DestinationOptions_AddDestinationCredentials MI_DestinationOptions_AddProxyCredentials MI_DestinationOptions_Clone MI_DestinationOptions_Delete MI_DestinationOptions_GetCertCACheck MI_DestinationOptions_GetCertCNCheck MI_DestinationOptions_GetCertRevocationCheck MI_DestinationOptions_GetCredentialsAt MI_DestinationOptions_GetCredentialsCount MI_DestinationOptions_GetCredentialsPasswordAt MI_DestinationOptions_GetDataLocale MI_DestinationOptions_GetDestinationPort MI_DestinationOptions_GetEncodePortInSPN MI_DestinationOptions_GetHttpUrlPrefix

MI_DestinationOptions_GetImpersonationType MI_DestinationOptions_GetMaxEnvelopeSize MI_DestinationOptions_GetNumber MI_DestinationOptions_GetOption MI_DestinationOptions_GetOptionAt MI_DestinationOptions_GetOptionCount MI_DestinationOptions_GetPacketEncoding MI_DestinationOptions_GetPacketIntegrity MI_DestinationOptions_GetPacketPrivacy MI_DestinationOptions_GetProxyType MI_DestinationOptions_GetString MI_DestinationOptions_GetTimeout MI_DestinationOptions_GetTransport MI_DestinationOptions_GetUILocale MI_DestinationOptions_SetCertCACheck MI_DestinationOptions_SetCertCNCheck MI_DestinationOptions_SetCertRevocationCheck MI_DestinationOptions_SetDataLocale MI_DestinationOptions_SetDestinationPort MI_DestinationOptions_SetEncodePortInSPN MI_DestinationOptions_SetHttpUrlPrefix MI_DestinationOptions_SetImpersonationType MI_DestinationOptions_SetMaxEnvelopeSize MI_DestinationOptions_SetNumber MI_DestinationOptions_SetPacketEncoding MI_DestinationOptions_SetPacketIntegrity MI_DestinationOptions_SetPacketPrivacy MI_DestinationOptions_SetProxyType MI_DestinationOptions_SetString MI_DestinationOptions_SetTimeout MI_DestinationOptions_SetTransport MI_DestinationOptions_SetUILocale MI_Filter_Evaluate MI_Filter_GetExpression MI_HostedProvider_Close MI_HostedProvider_GetApplication MI_Instance_AddElement MI_Instance_ClearElement MI_Instance_ClearElementAt MI_Instance_Clone MI_Instance_Delete MI_Instance_Destruct MI_Instance_GetClass MI_Instance_GetClassName MI_Instance_GetElement MI_Instance_GetElementAt MI_Instance_GetElementCount MI_Instance_GetNameSpace MI_Instance_GetServerName MI_Instance_IsA MI_Instance_SetElement MI_Instance_SetElementAt MI_Instance_SetNameSpace MI_Instance_SetServerName

Page 7: Desktop development with WPF

New Windows 8 desktop APIsMI_Operation_Cancel MI_Operation_Close MI_Operation_GetClass MI_Operation_GetIndication MI_Operation_GetInstance MI_Operation_GetSession MI_OperationOptions_Clone MI_OperationOptions_Delete MI_OperationOptions_DisableChannel MI_OperationOptions_EnableChannel MI_OperationOptions_GetEnabledChannels MI_OperationOptions_GetForceFlagPromptUserMode MI_OperationOptions_GetNumber MI_OperationOptions_GetOption MI_OperationOptions_GetOptionAt MI_OperationOptions_GetOptionCount MI_OperationOptions_GetPromptUserMode MI_OperationOptions_GetProviderArchitecture MI_OperationOptions_GetResourceUriPrefix MI_OperationOptions_GetString MI_OperationOptions_GetTimeout MI_OperationOptions_GetUseMachineID MI_OperationOptions_GetWriteErrorMode MI_OperationOptions_SetCustomOption MI_OperationOptions_SetForceFlagPromptUserMode MI_OperationOptions_SetNumber MI_OperationOptions_SetPromptUserMode MI_OperationOptions_SetProviderArchitecture MI_OperationOptions_SetResourceUriPrefix MI_OperationOptions_SetString MI_OperationOptions_SetTimeout MI_OperationOptions_SetUseMachineID MI_OperationOptions_SetWriteErrorMode MI_ParameterSet_GetMethodReturnType MI_ParameterSet_GetParameter MI_ParameterSet_GetParameterAt MI_ParameterSet_GetParameterCount MI_PropertySet_AddElement MI_PropertySet_Clear MI_PropertySet_Clone MI_PropertySet_ContainsElement MI_PropertySet_Delete MI_PropertySet_Destruct MI_PropertySet_GetElementAt MI_PropertySet_GetElementCount MI_QualifierSet_GetQualifier MI_QualifierSet_GetQualifierAt MI_QualifierSet_GetQualifierCount MI_Serializer_Close MI_Serializer_SerializeClass MI_Serializer_SerializeInstance MI_Server_GetSystemName MI_Server_GetVersion MI_Session_AssociatorInstances MI_Session_Close MI_Session_CreateInstance MI_Session_DeleteInstance MI_Session_EnumerateClasses MI_Session_EnumerateInstances

MI_Session_GetApplication MI_Session_GetClass MI_Session_GetInstance MI_Session_Invoke MI_Session_ModifyInstance MI_Session_QueryInstances MI_Session_ReferenceInstances MI_Session_Subscribe MI_Session_TestConnection MI_SubscriptionDeliveryOptions_AddDeliveryCredentials MI_SubscriptionDeliveryOptions_Clone MI_SubscriptionDeliveryOptions_Delete MI_SubscriptionDeliveryOptions_GetBookmark MI_SubscriptionDeliveryOptions_GetCredentialsAt MI_SubscriptionDeliveryOptions_GetCredentialsCount MI_SubscriptionDeliveryOptions_GetCredentialsPasswordAt MI_SubscriptionDeliveryOptions_GetDateTime MI_SubscriptionDeliveryOptions_GetDeliveryDestination MI_SubscriptionDeliveryOptions_GetDeliveryPortNumber MI_SubscriptionDeliveryOptions_GetDeliveryRetryAttempts MI_SubscriptionDeliveryOptions_GetDeliveryRetryInterval MI_SubscriptionDeliveryOptions_GetExpirationTime MI_SubscriptionDeliveryOptions_GetHeartbeatInterval MI_SubscriptionDeliveryOptions_GetInterval MI_SubscriptionDeliveryOptions_GetMaximumLatency MI_SubscriptionDeliveryOptions_GetNumber MI_SubscriptionDeliveryOptions_GetOption MI_SubscriptionDeliveryOptions_GetOptionAt MI_SubscriptionDeliveryOptions_GetOptionCount MI_SubscriptionDeliveryOptions_GetString MI_SubscriptionDeliveryOptions_SetBookmark MI_SubscriptionDeliveryOptions_SetDateTime MI_SubscriptionDeliveryOptions_SetDeliveryDestination MI_SubscriptionDeliveryOptions_SetDeliveryPortNumber MI_SubscriptionDeliveryOptions_SetDeliveryRetryAttempts MI_SubscriptionDeliveryOptions_SetDeliveryRetryInterval MI_SubscriptionDeliveryOptions_SetExpirationTime MI_SubscriptionDeliveryOptions_SetHeartbeatInterval MI_SubscriptionDeliveryOptions_SetInterval MI_SubscriptionDeliveryOptions_SetMaximumLatency MI_SubscriptionDeliveryOptions_SetNumber MI_SubscriptionDeliveryOptions_SetString MI_Utilities_CimErrorFromErrorCode MI_Utilities_MapErrorToExtendedError MI_Utilities_MapErrorToMiErrorCategory MirrorVirtualDisk NCryptCloseProtectionDescriptor

NCryptCreateProtectionDescriptor NCryptGetProtectionDescriptorInfo NCryptKeyDerivation NCryptProtectSecret NCryptQueryProtectionDescriptorName NCryptRegisterProtectionDescriptorName NCryptStreamClose NCryptStreamOpenToProtect NCryptStreamOpenToUnprotect NCryptStreamUpdate NCryptUnprotectSecret NdfCreateNetConnectionIncident NeedCurrentDirectoryForExePath NetCreateProvisioningPackage NetRequestProvisioningPackageInstall NetworkIsolationDiagnoseConnectFailureAndGetInfo NetworkIsolationEnumAppContainers NetworkIsolationEnumerateAppContainerRules NetworkIsolationFreeAppContainers NetworkIsolationGetAppContainerConfig NetworkIsolationRegisterForAppContainerChanges NetworkIsolationSetAppContainerConfig NetworkIsolationSetupAppContainerBinaries NetworkIsolationUnregisterForAppContainerChanges OfflineFilesQueryStatusEx OfflineFilesStart OnProfileLoaded OpenPackageInfoByFullName PackageFamilyNameFromFullName PackageFamilyNameFromId PackageFullNameFromId PackageIdFromFullName PackageNameAndPublisherIdFromFamilyName PackTouchHitTestingProximityEvaluation PathAllocCanonicalize PathAllocCombine PathCchAddBackslash PathCchAddBackslashEx PathCchAddExtension PathCchAppend PathCchAppendEx PathCchCanonicalize PathCchCanonicalizeEx PathCchCombine PathCchCombineEx PathCchFindExtension PathCchIsRoot PathCchRemoveBackslash PathCchRemoveBackslashEx PathCchRemoveExtension PathCchRemoveFileSpec PathCchRenameExtension PathCchSkipRoot PathCchStripPrefix PathCchStripToRoot PathIsUNCEx PeerDistClientGetInformationByHandle PeerDistGetOverlappedResult PeerDistGetStatusEx

PeerDistRegisterForStatusChangeNotificationEx PeerDistServerOpenContentInformationEx PowerDeterminePlatformRoleEx PowerRegisterSuspendResumeNotification PowerUnregisterSuspendResumeNotification PrefetchVirtualMemory ProcessBufferedPacketsInteractionContext ProcessInertiaInteractionContext ProcessPointerFramesInteractionContext PxeDhcpv6AppendOption PxeDhcpv6AppendOptionRaw PxeDhcpv6CreateRelayRepl PxeDhcpv6GetOptionValue PxeDhcpv6GetVendorOptionValue PxeDhcpv6Initialize PxeDhcpv6IsValid PxeDhcpv6ParseRelayForw PxeGetServerInfoEx QueryServiceDynamicInformation RegisterAppInstance RegisterBadMemoryNotification RegisterOutputCallbackInteractionContext RegisterPointerDeviceNotifications RegisterPointerInputTarget RegisterScaleChangeNotifications RegisterTouchHitTestingWindow RemoveDllDirectory RemovePointerInteractionContext ResetInteractionContext ResizeVirtualDisk RevokeScaleChangeNotifications RIOCloseCompletionQueue RIOCreateCompletionQueue RIOCreateRequestQueue RIODequeueCompletion RIODeregisterBuffer RIONotify RIOReceive RIOReceiveEx RIORegisterBuffer RIOResizeCompletionQueue RIOResizeRequestQueue RIOSend RIOSendEx RoActivateInstance RoCaptureErrorContext RoFailFastWithErrorContext RoFreeParameterizedTypeExtra RoGetActivatableClassRegistration RoGetActivationFactory RoGetBufferMarshaler RoGetErrorReportingFlags RoGetMetaDataFile RoGetParameterizedTypeInstanceIID RoGetServerActivatableClasses RoInitialize RoOriginateError RoOriginateErrorW RoParameterizedTypeExtraGetTypeSignature RoParseTypeName RoRegisterActivationFactories

RoRegisterForApartmentShutdown RoResolveNamespace RoResolveRestrictedErrorInfoReference RoRevokeActivationFactories RoSetErrorReportingFlags RoTransformError RoTransformErrorW RoUninitialize RoUnregisterForApartmentShutdown RtlAddGrowableFunctionTable RtlDeleteGrowableFunctionTable RtlGrowFunctionTable SCardGetDeviceTypeId SCardGetReaderDeviceInstanceId SCardGetReaderIcon SCardListReadersWithDeviceInstanceId SensorAdapterNotifyPowerChange SetCoalescableTimer SetCrossSlideParametersInteractionContext SetDefaultDllDirectories SetInertiaParameterInteractionContext SetInteractionConfigurationInteractionContext SetMouseWheelParameterInteractionContext SetPivotInteractionContext SetProcessInformation SetProcessMitigationPolicy SetProcessReference SetPropertyInteractionContext SetRestrictedErrorInfo SetThreadInformation SetVirtualDiskMetadata SetWindowFeedbackSetting SetWindowFeedbackSettings SignerSignEx2 SkipPointerFrameMessages SLActivateProduct SLClose SLConsumeRight SLDepositMigrationBlob SLDepositOfflineConfirmationId SLDepositOfflineConfirmationIdEx SLFireEvent SLGatherMigrationBlob SLGenerateOfflineInstallationId SLGenerateOfflineInstallationIdEx SLGetApplicationInformation SLGetApplicationPolicy SLGetAuthenticationResult SLGetGenuineInformationEx SLGetInstalledProductKeyIds SLGetLicense SLGetLicenseFileId SLGetLicenseInformation SLGetLicensingStatusInformation SLGetPKeyId SLGetPKeyInformation SLGetPolicyInformation SLGetPolicyInformationDWORD SLGetProductSkuInformation SLGetReferralInformation SLGetServerStatus

SLGetServiceInformation SLGetSLIDList SLInstallLicense SLInstallProofOfPurchase SLInstallProofOfPurchaseEx SLLoadApplicationPolicies SLOpen SLPersistApplicationPolicies SLPersistRTSPayloadOverride SLReArm SLRegisterEvent SLSetAuthenticationData SLSetCurrentProductKey SLUninstallLicense SLUninstallProofOfPurchase SLUnloadApplicationPolicies SLUnregisterEvent SslGetServerIdentity SspiDecryptAuthIdentityEx SspiEncryptAuthIdentityEx StopInteractionContext StorageAdapterNotifyPowerChange TdhCloseDecodingHandle TdhGetDecodingParameter TdhGetWppMessage TdhGetWppProperty TdhLoadManifestFromBinary TdhOpenDecodingHandle TdhSetDecodingParameter TKBLayoutType TraceQueryInformation UiaDisconnectAllProviders UiaDisconnectProvider UiaIAccessibleFromProvider UiaProviderForNonClient UiaProviderFromIAccessible UnregisterBadMemoryNotification UnregisterPointerInputTarget UtilAssembleStringsWithAlloc UtilLoadStringWithAlloc UtilStringCopyWithAlloc VectorChangedEventHandler<T> WaitOnAddress WakeByAddressAll WakeByAddressSingle WcmFreeMemory WcmGetProfileList WcmQueryProperty WcmSetProfileList WcmSetProperty WdsBpParseInitializev6 WdsCliGetDriverQueryXml WdsCliObtainDriverPackagesEx WebSocketAbortHandle WebSocketBeginClientHandshake WebSocketBeginServerHandshake WebSocketCompleteAction WebSocketCreateClientHandle WebSocketCreateServerHandle WebSocketDeleteHandle WebSocketEndClientHandshake

WebSocketEndServerHandshake WebSocketGetAction WebSocketReceive WebSocketSend WFDCancelOpenSession WFDCloseHandle WFDCloseSession WFDOpenHandle WFDOpenLegacySession WFDStartOpenSession WFDUpdateDeviceVisibility WinBioAsyncEnumBiometricUnits WinBioAsyncEnumDatabases WinBioAsyncEnumServiceProviders WinBioAsyncMonitorFrameworkChanges WinBioAsyncOpenFramework WinBioAsyncOpenSession WinBioCloseFramework WindowsCompareStringOrdinal WindowsConcatString WindowsCreateString WindowsCreateStringReference WindowsDeleteString WindowsDeleteStringBuffer WindowsDuplicateString WindowsGetStringLen WindowsGetStringRawBuffer WindowsInspectString WindowsIsStringEmpty WindowsPreallocateStringBuffer WindowsPromoteStringBuffer WindowsReplaceString WindowsStringHasEmbeddedNull WindowsSubstring WindowsSubstringWithSpecifiedLength WindowsTrimStringEnd WindowsTrimStringStart WinHttpCreateProxyResolver WinHttpFreeProxyResult WinHttpGetProxyForUrlEx WinHttpGetProxyResult WinHttpResetAutoProxy WinHttpWebSocketClose WinHttpWebSocketCompleteUpgrade WinHttpWebSocketQueryCloseStatus WinHttpWebSocketReceive WinHttpWebSocketSend WinHttpWebSocketShutdown WSManConnectShell WSManConnectShellCommand WSManCreateShellEx WSManDisconnectShell WSManInitialize WSManReconnectShell WSManReconnectShellCommand WSManRunShellCommandEx WTSEnableChildSessions WTSGetChildSessionId WTSIsChildSessionsEnabled WTSSetRenderHint

Page 8: Desktop development with WPF

New features for WPF 4.5Stronger Portable Class Library (PCL) support for multi-targeting

New async and await and Task<T> support

Built-in ribbon and ribbon window

Data binding update delay

Static property binding and change notification

Event weak references

Binding expression information

INotifyDataErrorInfo

ICustomTypeProvider

Accessing collections on non-UI threads

Live shaping of collections

VirtualizingPanel support for pixel scrolling

Bug fixes, performance improvements, and more

Tons of other .NET 4.5-wide improvements and features

Page 9: Desktop development with WPF

Multi-targeting

Page 10: Desktop development with WPF

Likely sharing/multi-targeting scenarios

.NET Desktop App

Windows Store App

.NET Server App

Shared model, logic, rules, etc.

Windows Phone App

Shared viewmodel

Page 11: Desktop development with WPF

Approaches

Conditional compilation and linked filesNo runtime support requiredAll in the toolingSome additional work for the developer

Portable class librariesBuilt into the tooling and runtimeExpanded capabilities in .NET 4.5Easiest for developers

Page 12: Desktop development with WPF

Conditional compilationBy default, WinRT apps define NETFX_CORE

More info in MSDN Magazine Windows 8 Special Issue: http://bit.ly/MsdnWin8Pmb

#if NETFX_COREusing Windows.UI.Xaml;#elseusing System.Windows.Xaml;#endif

Page 13: Desktop development with WPF

PCL is supported across a wide range of .NET client targets

Portable Class LibrariesFeature .NET Desktop

(and Server)Windows Store apps Silverlight Windows

Phone

Core .NET Yes Yes Yes Yes

LINQ Yes Yes Yes Yes

IQueryable Yes Yes Yes 7.5+

Dynamic keyword 4.5+ Yes Yes

Serialization Yes Yes Yes

WCF Yes Yes Yes Yes

MVVM Support 4.5+ Yes Yes Yes

and more … … … …More details: http://bit.ly/NetPCL PCL also supports Xbox

Page 14: Desktop development with WPF

Dedicated project type in Visual Studio 2012

Portable Class Libraries

Page 15: Desktop development with WPF

Demo

Multi-targeting with PCL

Page 16: Desktop development with WPF

async and awaitTogether, greatly simplifies asynchronous codeEspecially suitable for networking operations

Relies onNew C# language featureTask<T> and the Task Parallel Library

Compiler does the hard work. See my analysis of the IL: http://bit.ly/asyncstatemachine

Page 17: Desktop development with WPF

Visual Studio 2012 now generates awaitable proxies for service references in .NET 4.5

Tooling support

Page 18: Desktop development with WPF

Demo

Asynchronous calls

Page 19: Desktop development with WPF

Binding to static propertiesChange notification following INotifyPropertyChanged pattern, but without the explicit interfaceTarget: Property="{Binding Path=(namespace:class.property)}"

Source: public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

Page 20: Desktop development with WPF

New BindingExpression APIsNew APIs for accessing binding expression informationResolvedSource (source object)ResolvedSourcePropertyName (property)Target (target object)TargetProperty (target property)

more

Page 21: Desktop development with WPF

Binding delayUpdate a value only after it stabilizes to reduce the chatter across the binding system<Slider x:Name="ValueSlider" Minimum="0" Maximum="100" Margin="20" Height="25" Value="{Binding ElementName=ValueText, Delay=500, Path=Text, Mode=TwoWay}" />

<TextBox x:Name="ValueText" Text="50" Width="100" Height="50" FontSize="20" HorizontalAlignment="Center" />

Page 22: Desktop development with WPF

Demo

Binding enhancements

Page 23: Desktop development with WPF

List virtualizationAttached property for ItemsControl elements

VirtualizingPanel.ScrollUnit="Pixel"

VirtualizingPanel.CacheLength="2"

VirtualizingPanel.CacheLengthUnit="Page"

Pixel or Item

Pixel, Item, or Page

Page 24: Desktop development with WPF

Live data shaping with DataGridSorted collection changes intelligently applied to DataGridIncluding property changes for elements in the collection

Requires a CollectionViewSet sort/filter/group descriptionsTell it which fields to watchTell it you want to live sort/filter/groupKeep performance in mind

Page 25: Desktop development with WPF

Demo

Virtualization and shaping

Page 26: Desktop development with WPF

Weak event referencesBuilt-in support for the Weak Event PatternUse when listener doesn’t know when to unhook event handlerHelps avoid memory leaks

Generic WeakEventManagerUses reflectionFlexible, but not as efficientDerive your own for more runtime efficiency

Page 27: Desktop development with WPF

Collection synchronizationBeforeCollections could not be modified except on creating threadLots of dispatcher calls

NowGet a lock for the collectionEnable synchronizationUpdate it from any thread

Page 28: Desktop development with WPF

Collection synchronizationclass MainViewModel{ public ObservableCollection<Stock> Stocks { get; private set; } private object _stocksLock = new object();

public MainViewModel() { Stocks = new ObservableCollection<Stock>(); BindingOperations.EnableCollectionSynchronization (Stocks, _stocksLock); } }

Provide lock object

Enable Synchronization

Page 29: Desktop development with WPF

Demo

Collection synchronization

Page 30: Desktop development with WPF

RecommendationsWrite WinRT XAML (or HTML/JS, or C++/DX/XAML) apps to fully exploit the power of Windows Store app platform

Write desktop apps in WPF to target down-level operating systems and exploit potentially unsafe APIs and hardware

Share code and binaries between both to maximize the value of your investment

Page 31: Desktop development with WPF

© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.