-
Notifications
You must be signed in to change notification settings - Fork 5
ReplaceEventHandlerParameterMember Xaml Mapping Action
This mapping action perform changes on member accesses of event handler parameters. This mapping action is useful when creating a mapping for an event handler with different event arguments.
This is the XAML equivalent of the [ReplaceParameterMember Code Action](ReplaceParameterMember Code Action) .
Property | Usage | Description |
---|---|---|
Position | Required | The position of the parameter to change the property accesses to. |
Replacements | Content property | The member name replacement pairs. These pairs are specified using the ParameterMemberReplacement element. See below for details |
The member name replacement pairs. These pairs are specified using the ParameterMemberReplacement
element. It has the following properties:
Attribute name | Description |
---|---|
From | The name of the original member. |
To | The name of the member in the target class |
ToMemberKind | ToMemberKind Can have the values Property or Method . When the value is Method the Action treats the value of To as the name of a method. Causes the action to change the expressions that reference the original property to a method invocation with no parameters. When the value of FromMemberKind is Property . The default value is Property
|
FromMemberKind | FromMemberKind Can have the values Property or Method . When the value is Method the Action treats the value of From as the name of a method. Causes the action to change the invocations of the method From to a Property reference when ToMemberKind has the value Property . |
Note: When ToMemberKind
and FromMemberKind
both have the same value. The Action will proceed to replace the references of the From
property to the To
Property.
<xmap:ParameterMemberReplacement From="Cancel" To="Handled"/>
In this case by default ToMemberKind
and FromMemberKind
have the value property. Thus all the references of Cancel
will be replaced with Handled
<xmap:ParameterMemberReplacement From="Cancel" To="Handled" FromMemberKind="Method"/>
In this case the references of Cancel
will be replaced with invocations to GetHandled()
This mapping operation is useful to perform changes on event handlers that changed on UWP . One example is the conversion from BackKeyPress (https://msdn.microsoft.com/en-US/library/windows/apps/xaml/microsoft.phone.controls.phoneapplicationpage.backkeypress%28v=vs.105%29.aspx) to the UWP equivalent BackPressed event (https://msdn.microsoft.com/en-us/library/windows.phone.ui.input.hardwarebuttons.backpressed.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 .) When moving to this event handler we need to change the event handlers from the CancelEventArgs (https://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs%28v=vs.110%29.aspx) to the Windows.Phone.UI.Input.BackPressedEventArgs class (https://msdn.microsoft.com/en-us/library/windows.phone.ui.input.backpressedeventargs.aspx). Because the CancelEventArgs class also exist in UWP we cannot simply convert from CancelEventArgs to BackPressedEventArgs. In this case we need to apply a local conversion which is performed using the ReplaceParameterMember and ReplaceParameterDeclarationType mapping operations. For example:
<MapUnit xmlns='clr-namespace:Mobilize.Mappers.Extensibility.Core;assembly=Mobilize.ExtensibleMappers'
xmlns:xmap='clr-namespace:Mobilize.XamlMappers;assembly=Mobilize.XamlMapper'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >
<MapUnit.Elements>
<xmap:XamlElementMapper ElementName="PhoneApplicationPage" ElementNamespace="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone">
<xmap:XamlElementMapper.Maps>
...
<xmap:XamlMap Kind="Property" PropertyName="BackKeyPress" >
<xmap:XamlMap.Action>
<xmap:ActionSequence>
<xmap:AddStatementToConstructorFromTemplate>
<![CDATA[ Windows.Phone.UI.Input.HardwareButtons.BackPressed += $propertyValue; ]]>
</xmap:AddStatementToConstructorFromTemplate>
<xmap:ChangeEventHandlerEventArgsType NewEventArgsTypeName="Windows.Phone.UI.Input.BackPressedEventArgs" />
<xmap:ReplaceEventHandlerParameterMember Position="1">
<xmap:ParameterMemberReplacement From="Cancel" To="Handled"/>
</xmap:ReplaceEventHandlerParameterMember>
</xmap:ActionSequence>
</xmap:XamlMap.Action>
</xmap:XamlMap>
</xmap:XamlElementMapper.Maps>
<xmap:XamlElementMapper.ReferencedPackages>
<x:String>CommonAttributesToRemove</x:String>
<x:String>CommonPostMappingActions</x:String>
</xmap:XamlElementMapper.ReferencedPackages>
</xmap:XamlElementMapper>
</MapUnit.Elements>
</MapUnit>
Using this mapping we can convert from the following event handler:
--- Windows Phone 8---
void MyPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
if (this.NeedToCancel)
{
e.Cancel = true;
}
}
--- UWP ---
void MyPage_BackKeyPress(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (this.NeedToCancel)
{
e.Handled = true;
}
}
In this example the EventHandler
method will replace the type of the of the first parameter from GestureEventArgs to Windows.UI.Xaml.Controls.Maps.MapInputEventArgs. The method GetPosition is not present in
the class Windows.UI.Xaml.Controls.Maps.MapInputEventArgs
, but, it has the corresponding property named Position. In order to change the invocations to GetPosition to references to the property Position we need
to indicate that GetPosition is in fact a method.
<MapUnit xmlns='clr-namespace:Mobilize.Mappers.Extensibility.Core;assembly=Mobilize.ExtensibleMappers'
xmlns:xmap='clr-namespace:Mobilize.XamlMappers;assembly=Mobilize.XamlMapper'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >
<MapUnit.Elements>
<xmap:XamlElementMapper ElementName="Map" ElementNamespace="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps">
<xmap:XamlElementMapper.Maps>
...
<xmap:XamlMap Kind="Property" PropertyName="Tap" >
<xmap:XamlMap.Action>
<xmap:ActionSequence>
<xmap:ChangeEventHandlerEventArgsType NewEventArgsTypeName="Windows.UI.Xaml.Controls.Maps.MapInputEventArgs" />
<xmap:ReplaceEventHandlerParameterMember Position="1">
<xmap:ParameterMemberReplacement From="GetPosition" To="Position" FromMemberKind="Method"/>
</xmap:ReplaceEventHandlerParameterMember>
</xmap:ActionSequence>
</xmap:XamlMap.Action>
</xmap:XamlMap>
...
</xmap:XamlElementMapper.Maps>
</xmap:XamlElementMapper>
</MapUnit.Elements>
</MapUnit>
Using this mapping we can convert from the following event handler:
--- Windows Phone 8---
private void Map_OnTap(object sender, GestureEventArgs e)
{
Point clickLocation = e.GetPosition(Map);
GeoCoordinate coordinate = Map.ConvertViewportPointToGeoCoordinate(clickLocation);
SetPushpin(coordinate);
((ApplicationBarIconButton)ApplicationBar.Buttons[0]).IsEnabled = true;
}
--- UWP ---
private void Map_OnTap(object sender, Windows.UI.Xaml.Controls.Maps.MapInputEventArgs e)
{
Windows.Foundation.Point clickLocation = e.Position;
Windows.Devices.Geolocation.Geopoint geoPoint;
Map.GetLocationFromOffset(clickLocation, out geoPoint);
Windows.Devices.Geolocation.Geopoint coordinate = geoPoint;
SetPushpin(coordinate);
((Windows.UI.Xaml.Controls.AppBarButton)((Windows.UI.Xaml.Controls.CommandBar)BottomAppBar).PrimaryCommands[0]).IsEnabled = true;
}
TODO
Contact us for more information
Overview
Writing mappings
Code Mapping Actions
- ActionSequence
- AddHelper
- AddNamespaceImport
- AddPreStatementFromTemplate
- CommentOut
- Conditional
- Keep Code Mapping Action
- MarkAsNotMapped
- RedirectCall
- RedirectCallToInnerMember
- RedirectIndexer
- RedirectProperty
- RemoveCurrentStatement
- RemoveParameter
- ReplaceClassUsage
- ReplaceMethodBodyWithTemplate
- ReplaceParameterDeclarationType
- ReplaceParameterMember
- ReplaceParameterValue
- ReplaceWithMethodCall
- ReplaceWithProperty
- ReplaceWithTemplate
Code Mapping Conditions
- AllConditionsApply
- ArgumentCount
- AssignName
- AssignNameToArgumentRange
- IsExpressionOfType
- IsStringLiteralMatchingRegex
- WithArgument
- WithAssignment
- WithAssignmentLeftSide
- WithAssignmentRightSide
- WithCalledMemberOwner
- WithCalledMethodExpression
- WithConstructorCall
- WithLambdaExpressionBody
- WithLambdaExpressionParameter
- WithLeftSideOfDottedAccess
- WithMemberInitValue
- WithMethodCall
XAML mapping actions
- ActionSequence
- AddStatementToConstructorFromTemplate
- BindPropertyValueElement Xaml mapping action
- ChangeEventHandlerEventArgsType
- CommentOutElement
- CommentOutProperty
- MarkAsNotMapped
- MoveValueToContentProperty
- RemoveNamespaceDeclaration
- RenameElement
- RenameProperty
- ReplaceAttributeValue
- ReplaceEventHandlerBodyWithTemplate
- ReplaceEventHandlerParameterMember
- ReplaceNamespaceDeclaration
- ReplacePropertyValueWithParentResource
- ReplaceStaticResourceWithThemeResource
- SetPropertyValueToComplexElement
- SetPropertyValueToSimpleValue
- WrapContent
XAML mapping conditions
Misc