Xamarin - 替换TextChanged()事件上的QR码

时间:2017-04-20 01:52:54

标签: c# xamarin xamarin.forms qr-code

我正在Xamarin Forms中编写一个QR代码应用程序,它在文本条目中输入一个输入字符串并将其转换为QR代码。我想在输入或删除文本条目中的输入时动态更改QR代码,类似于我找到的here这个网站。

我相信这可以使用TextChangeEventArgs,但我不确定它是如何运作的。我在这里缺少什么?

我的文字输入

var myEntry = new Entry
            {
                Text = "Hello SO"                    
            };

这是我在更改My Entry时创建新条形码的功能(它还没有被任何东西调用)

void MyEntryChanged(Entry myEntry, TextChangedEventArgs e)
        {
            barcode = new ZXingBarcodeImageView
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                AutomationId = "zxingBarcodeImageView",
            };
            barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
            barcode.BarcodeOptions.Width = 300;
            barcode.BarcodeOptions.Height = 300;
            barcode.BarcodeOptions.Margin = 10;
            barcode.BarcodeValue = myEntry.Text;

            Content = barcode;
        }

1 个答案:

答案 0 :(得分:0)

由于MyEntryChanged事件发生在与UI不同的线程中,因此该线程中不存在元素Content。

你应该使用这样的代码:

void MyEntryChanged(Entry myEntry, TextChangedEventArgs e)
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            barcode = new ZXingBarcodeImageView
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                AutomationId = "zxingBarcodeImageView",
            };
            barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
            barcode.BarcodeOptions.Width = 300;
            barcode.BarcodeOptions.Height = 300;
            barcode.BarcodeOptions.Margin = 10;
            barcode.BarcodeValue = myEntry.Text;

            Content = barcode;
        });

    }