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;
		}
    }
}

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);

AppStore publish error: ITMS-90717 (Alpha csatornás PNG ikon)

Transporter app-al való alkalmazásfeltöltésnél az AppStore-ba hibát dob:

ERROR ITMS-90717: "Invalid App Store Icon. The App Store Icon in the asset catalog in 'SimpleTaxiOrderXamarin.iOS.app' can't be transparent nor contain an alpha channel."

Ebben az esetben nem az info.plist-ben lévő iTunes Artworkot kell módosítani, hanem az alkalmazás ikonjának kiválasztott AssetCatalogban lévő AppStore ikonokat.

Hasznos tool az alkalmazás ikonok elkészítéséhez: https://appicon.co/

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.

Windows: “Leírás nélküli hiba történt”

“Leírás nélküli hiba történt” mondják a Magyar Windows Server 2008-tól felfelé található verziói, felhasználó hozzáadásánál.

A probléma előidézése a következőképpen: Szerveren megnyitjuk a Számítógép kezelést, azon belül a Felhasználók és Csoportok lapon a Felhasználóknál új felhasználót szeretnénk felvinni, akinek a jelszava soha nem jár le, és a felhasználó nem módosíthatja a jelszót (Ezeknek a variációját nem próbáltam,  de ebben az esetben mindenképpen találkozunk a problémával.)

Amennyiben a jelszó túl könnyűnek számít, az adminisztrátor abban az esetben találkozik a fent említett hibaüzenettel.

A Windows csoportházirendében van egy Password policiryre vonatkozó beállítás, amellyel engedélyezhetjük a könnyű jelszavak használatát, de ennek állítása nem ajánlott, főleg kiszolgálókon.

Ajánlott megoldás: Válasszunk egy erős jelszót, amelyben kis- nagybetűk szerepelnek, számokkal együtt, és legalább 8 karakter hosszúak.