-
Xamarin - change image for ImageButton
For my project I'm working on I needed a button with an image that needs to be changed according to a state variable using XAML and MVVM. In this case, the changing image for a start / stop button:
Add the ImageButton to the MainPage.xaml:
<ContentPage.BindingContext> <local:MainPageViewModel /> </ContentPage.BindingContext> <StackLayout> <ImageButton Source="{Binding StartStopImage}" Command="{Binding StartStopCommand}" WidthRequest="50" HeightRequest="50" HorizontalOptions="Center" VerticalOptions="Center" > </ImageButton>Add the implementation for MVVM:
public MainPageViewModel() { StartStopCommand = new Command(async () => await StartStop()); } public async Task StartStop() { recordEnabled = !recordEnabled; StartStopImage = recordEnabled ? "stop.png" : "start.png"; } public Command StartStopCommand { get; } private string startStopImage = "stop.png"; public string StartStopImage { get => startStopImage; set { startStopImage = value; OnPropertyChanged(nameof(StartStopImage)); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } -
Replace substring in substrings with Regular expressions (regex)
A regular expression defines a search pattern for strings. Replace is possible for text matches, but repeated substring replace in substrings is difficult. Especially if the text you want to replace is also outside of the initial substrings. Using cascaded match evaluators, this replacements gets very easy. For example to replace quoted text withing square brackets.
Please note the middle text "text" in this example which must not be replaced.["text1"] "text" ["text2"]
Begin[Pre"1txet"Post]End "text" Begin[Pre"2txet"Post]EndFirst the text is splitted by the primary substrings defined by square brackets.
Then these substrings are recomposed according to the business logic. In this example the string gets enclosed in a "Pre" / "Post" and then reverted. The primary substrings gets enclosed in "Begin" / "End".string inputText = "[\"text1\"] "text" [\"text2\"]"; string replacedText = Regex.Replace( inputText, $"(\\[)(.*?)(\\])", arrayMatch => { return $"Begin" + arrayMatch.Groups[1].Value + Regex.Replace( arrayMatch.Groups[2].Value, $"(\".*?\")+", contentMatch => { return $"Pre" + new string(contentMatch.Groups[1].Value.Reverse().ToArray()) + "Post"; }) + arrayMatch.Groups[3].Value + $"End"; });Or modify a text section to add a link from a markdown link to the following picture:
from:
[Interactive Panorama title](link.htm)
to:
[Interactive Panorama title](link.htm)

Using PowerShell:[string]$content = [System.IO.File]::ReadAllText($FileName) # using '(?s)', the dot '.' matches the newline and allows for multiline replace [string]$StringsRegex = "(?s)(?<section>\[Interactive Panorama.*?\]\((?<link>.*?)\).*?)(?<bild>\!\[\]\(.*?\))" $updatedContent = $content -replace $StringsRegex, { $match = $_ $section = $match.Groups["section"].Value $link = $match.Groups["link"].Value $bild = $match.Groups["bild"].Value # already replaced? if(-not $section.Contains("<")) { # insert link # '$section$bild' -> 'section<a href="$link">$bild</a>' "$section<a href=""$link"">$bild</a> } } if($updated) { [string]$outFile = FileName + ".updated" [IO.File]::WriteAllText($outFile, $updatedContent) } -
use TLS1.2
If you found that your code to download from a website started failing with an error like:
The request was aborted: Could not create SSL/TLS secure channel.or
Ausnahme beim Aufrufen von "DownloadFile" mit 2 Argument(en): "Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden." + $webclient.DownloadFile($file, $toZipFile) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : WebExceptionthen your webserver security is updated and now requires TLS1.2.
Tls is a security protocol to transfer data over the Internet. To solve this issue, simply set the security protocol to Tls1.2.For example in PowerShell:
$webclient = New-Object System.Net.WebClient [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $webclient.DownloadFile($file, $toZipFile) -
Encrypt your data
Sending data over the Internet is not safe. A safe connections takes effort and resources.
If you manage to get your mail send via encryption, you forgot the National Security Agencies (in short NSA) that have access to the mail servers and scan your data before it gets sent encrypted over the Internet. Move your data up to an online storage leaves them in a container that is not yours alone.But if you encrypt and decrypt data on your computer first with a strong 256bit encryption key, you can leave any security agency in the dark.
These Windows Powershell script functions makes it easy to encrypt and decrypt your files.
Since it is a symmetrical cipher, the same password is used for encryption and decryption.
If you need to pass your large secure data to another receiver, pass on the script with the new secret password and sentences using an unsymmetrical cipher or an alternative transport (mail / USB stick). The reward is a secure data transmission.For example encrypt a file with the script:
Encrypt-File "C:\data\mydata.zip"Send this encrypted file to an online storage or send via mail.
Receive the file and decrypt with the same script password:Decrypt-File "C:\download\mydata.zip"
If you intent to encrypt/decrypt pictures, you can use the script plugins in cPicture.Download
Encrypt-Decrypt Script
(remove the trailing .txt from the file once it is downloaded)Note
Change the secret phrases and password in the script.
Select the script function you want to use at the bottom of the script or add the script to an existing upload/download process. -
'Encountered an improper argument.'
Ever run into this error message?
The error message 'Encountered an improper argument.' is from an uncaught exception in WindowProc.

In:
LRESULT CWinApp::ProcessWndProcException(CException* e, const MSG* pMsg) e->ReportError(MB_ICONEXCLAMATION|MB_SYSTEMMODAL, nIDP);the error message is
nIDP = AFX_IDP_INTERNAL_FAILURE:#define AFX_IDP_INTERNAL_FAILURE 0xF108 // general failure
Usually you do not end up here. But there are cases where it happens. I have one example which was difficult to debug: An existing MFC based app upgraded to a ribbon control using a release build with static linking. Dynamic linked release builds and all debug builds are not affected.
It all starts at theInitInstance()of your app when you load the main frame:pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL);
Then all the way down the call stack:
BOOL CFrameWndEx::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext) BOOL CFrameWnd::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext) BOOL CFrameWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, LPCTSTR lpszMenuName, DWORD dwExStyle, CCreateContext* pContext) BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam)until you reach:
ISOLATION_AWARE_INLINE HWND IsolationAwarePrivatenCv IsolationAwareCreateWindowExW(_In_ DWORD dwExStyle,_In_opt_ LPCWSTR lpClassName,_In_opt_ LPCWSTR lpWindowName,_In_ DWORD dwStyle,_In_ int X,_In_ int Y,_In_ int nWidth,_In_ int nHeight,_In_opt_ HWND hWndParent,_In_opt_ HMENU hMenu,_In_opt_ HINSTANCE hInstance,_In_opt_ LPVOID lpParam)
At this point you suddenly end up in the exception handler of the WndProc:
LRESULT AFXAPI AfxCallWndProc(CWnd* pWnd, HWND hWnd, UINT nMsg, WPARAM wParam = 0, LPARAM lParam = 0)
All class names, handles and sizes look alright. The last message is 5, which is a WM_SIZE message with the right lParam value. Usually you get a debug break and know why the exception was raised, but here it seemed a mystery. But a quick compare to a sample app from the templates revealed the solution: The ribbon required additional resources in order to run in a static release build in the .rc file:
#if !defined(_AFXDLL) #include "l.DEU\afxprint.rc" // Ressourcen für Drucken/Seitenansicht #include "l.DEU\afxribbon.rc" // Ressourcen für MFC-Menüband und -Steuerleiste #endif(Remove the language prefix 'l.DEU\' with your language code if you are building another language.)