|
#nullable disable
using System;
using Microsoft.Maui.Controls.Compatibility;
using Microsoft.Maui.Handlers;
namespace Microsoft.Maui.Controls
{
/// <include file="../../../docs/Microsoft.Maui.Controls/VisualElement.xml" path="Type[@FullName='Microsoft.Maui.Controls.VisualElement']/Docs/*" />
public partial class VisualElement
{
internal static new void RemapForControls()
{
RemapForControls(ViewHandler.ViewMapper, ViewHandler.ViewCommandMapper);
}
internal static void RemapForControls(
IPropertyMapper<IView, IViewHandler> viewMapper,
CommandMapper<IView, IViewHandler> commandMapper)
{
#if WINDOWS
viewMapper.ReplaceMapping<IView, IViewHandler>(PlatformConfiguration.WindowsSpecific.VisualElement.AccessKeyHorizontalOffsetProperty.PropertyName, MapAccessKeyHorizontalOffset);
viewMapper.ReplaceMapping<IView, IViewHandler>(PlatformConfiguration.WindowsSpecific.VisualElement.AccessKeyPlacementProperty.PropertyName, MapAccessKeyPlacement);
viewMapper.ReplaceMapping<IView, IViewHandler>(PlatformConfiguration.WindowsSpecific.VisualElement.AccessKeyProperty.PropertyName, MapAccessKey);
viewMapper.ReplaceMapping<IView, IViewHandler>(PlatformConfiguration.WindowsSpecific.VisualElement.AccessKeyVerticalOffsetProperty.PropertyName, MapAccessKeyVerticalOffset);
#endif
viewMapper.ReplaceMapping<IView, IViewHandler>(nameof(BackgroundColor), MapBackgroundColor);
viewMapper.ReplaceMapping<IView, IViewHandler>(nameof(Page.BackgroundImageSource), MapBackgroundImageSource);
viewMapper.ReplaceMapping<IView, IViewHandler>(SemanticProperties.DescriptionProperty.PropertyName, MapSemanticPropertiesDescriptionProperty);
viewMapper.ReplaceMapping<IView, IViewHandler>(SemanticProperties.HintProperty.PropertyName, MapSemanticPropertiesHintProperty);
viewMapper.ReplaceMapping<IView, IViewHandler>(SemanticProperties.HeadingLevelProperty.PropertyName, MapSemanticPropertiesHeadingLevelProperty);
viewMapper.AppendToMapping<VisualElement, IViewHandler>(nameof(IViewHandler.ContainerView), MapContainerView);
commandMapper.ModifyMapping<VisualElement, IViewHandler>(nameof(IView.Focus), MapFocus);
}
public static void MapBackgroundColor(IViewHandler handler, IView view) =>
handler.UpdateValue(nameof(Background));
public static void MapBackgroundImageSource(IViewHandler handler, IView view) =>
handler.UpdateValue(nameof(Background));
static void MapSemanticPropertiesHeadingLevelProperty(IViewHandler handler, IView element) =>
(element as VisualElement)?.UpdateSemanticsFromMapper();
static void MapSemanticPropertiesHintProperty(IViewHandler handler, IView element) =>
(element as VisualElement)?.UpdateSemanticsFromMapper();
static void MapSemanticPropertiesDescriptionProperty(IViewHandler handler, IView element) =>
(element as VisualElement)?.UpdateSemanticsFromMapper();
void UpdateSemanticsFromMapper()
{
UpdateSemantics();
Handler?.UpdateValue(nameof(IView.Semantics));
}
static void MapContainerView(IViewHandler handler, VisualElement element) =>
element._platformContainerViewChanged?.Invoke(element, EventArgs.Empty);
static void MapFocus(IViewHandler handler, VisualElement view, object args, Action<IElementHandler, IElement, object> baseMethod)
{
if (args is not FocusRequest fr || view is not VisualElement element)
return;
view.MapFocus(fr, baseMethod is null ? null : () => baseMethod?.Invoke(handler, view, args));
}
}
}
|