Xamarin Forms Maps: Nagyításra szánt gombok eltűntetése

Androidon default megjelennek a Xamarin.Forms.Maps.Map használata esetén a nagyításra szánt + és – gombok, illetve a felhasználó aktuális pozíciójára mozgató gomb.
Ezeknek eltűntetéséhez egy CustomMapRenderer-t kell létrehozni, és az Androidos rendererben be kell állítani a térképen, hogy ne jelenlítse meg ezeket a plusz gombokat.

Xamarin Forms kód:

public class CustomMap : Map
    {
        public CustomMap(MapSpan region) : base(region)
        {
        }
    }

Xamarin.Android kód:

[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))]

namespace SampleApp.Droid.Renderers
{
    public class CustomMapRenderer : MapRenderer
    {
		protected override void OnMapReady(GoogleMap map)
		{
			base.OnMapReady(map);
			// Nagyításhoz gombok 
			map.UiSettings.ZoomControlsEnabled = false;
			// Saját helyzet gombok
			map.UiSettings.MyLocationButtonEnabled = false;
		}
    }
}
This content has 4 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

Word Capitalisation Xamarin Forms Entryben

Amennyiben azt szeretnénk, hogy minden szóköz leütése után automatikusan nagybetűvel kezdje a szavakat a készülék-billentyűzet abban az esetben el kell nevezni az Entry-t, jelen esetben az Entryből származtatott UserControlt.

<blackandyellowdesign:UnderlinedEntryWithLabelOnRight
                    x:Name="FullNameEntry"
                    Placeholder="{markupextensions:Multilanguage TranslationKey=PlaceholderRegisterViewName}"
                    Text="{Binding Path=FullName}" />

Így hivatkozható CodeBehindban FullNameEntry-ként.

A konstruktorban (vagy tetszőleges helyre, valamilyen trigger esetén) pedig be kell állítani a Keyboard tulajdonságát, a Keyboard osztály statikus “Create” metódusának meghívásával.

        FullNameEntry.Keyboard = Keyboard.Create(KeyboardFlags.CapitalizeWord);
This content has 4 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

if(true) else ágba futásának története

Először nem hittem a szememnek, amikor megláttam..

A fenti példa szemlélteti, hogy két megegyező típusú, és megegyező értékű enum a debug folyamat során quick watchban egyenlőségvizsgálatnál igazra értékelődik ki, de mégis az else ágba fut a debug folyamatban lévő kód tovább.

A fenti videón látható részlet egy XAML converter létrehozásánál keletkezett, ahol az egyenlőségvizsgálat egy boolean értékkel kellett hogy visszatérjen. A feladat az volt, hogyha a ViewModellen található UIMode property értéke egy meghatározott értéket vesz fel, akkor a láthatósága bizonyos kontrolloknak ennek megfelelően állítódjon.
Jó ötletnek tűnt persze, hogy Convertert írunk a Bindable propertyre, ami paraméterben megkapja x:Static-kal, hogy milyen értéknek kell megfelelnie.

Jött a megvalósítás, a rutinfeladat, hiszen nem ez az első converter amit pályafutásom alatt már megírtam, hittem én. Majd szembesültem a ténnyel, hogy az az újonnan kitalált funkció integráció utáni tesztelési folyamatában közel sem úgy működik a dolog, ahogy azt elterveztem.

Ilyenkor persze jönnek a szokásos gyógyegér dologra való rámondásos orvoslásoknak tűnő dolgok: Clean solution, app törtlés mobilról, majd miután ez sikertelen, azután Force clean solution (ez a bin/debug obj/debug mappák fizikai törlését jelenti), VS restart, majd végül gép restart, de egyik sem hozott eredményt.

A probléma forrása (Ha gondolkozni szeretnél még azon, hogy mi lehetett a baj, ne olvasd tovább! 🙂 )

Magának az újonnan létrehozott Converternek, hogy használható legyen konverterként, az IValueConverterből kellett származnia, amely megköveteli, a Convert, és ConvertBack metódusok implementációját. Mivel ezeknek a metódusoknak a szignatúrája objectként várja át a value-t, és a paramétert, ezért az érték típusú változók boxingolódnak.

Mivel runtime az object equals fut meg rájuk, hamisra fog kiértékelődni a condition, és ezért esik az else ágba a kód.

Hogy a Visual Studio a debug folyamat során a watchban hogyan jön rá arra, hogy mégsem az object equalst kéne rajtuk végrahjtani, nem jártam utána, ettől függetlenül is kissé idegtépő volt a dolog.

This content has 5 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.