Страницы

Поиск по вопросам

Показаны сообщения с ярлыком uwp. Показать все сообщения
Показаны сообщения с ярлыком uwp. Показать все сообщения

пятница, 13 марта 2020 г.

Как сделать медленно плавающий фон?

#c_sharp #net #xaml #uwp


Как сделать эффект для image, чтобы, например, широкая картинка медленно плыла слева
направо, или сверху вниз?
    


Ответы

Ответ 1



Создаете анимацию для своей картинки И в удобном месте запускаете свою анимацию ImageMotionStoryboard.Begin(); UPDATE: пример работы

понедельник, 9 марта 2020 г.

Как правильно работать с экземпляром класса на двух страницах? C#/UWP

#c_sharp #uwp


Есть две страницы, на первой я создаю экземпляр класса, в который я добавляю данные.
Перехожу на вторую страницу и они отображаются. Но когда я заново захожу на первую
страницу, и создаю новые данные, они перезаписывают уже имеющиеся, а не добавляются.
Я так понимаю, должен быть один экземпляр класса, в который я каждый раз буду добавлять
данные, но как это реализовать? 
    


Ответы

Ответ 1



Я нашел решение, воспользовавшись передачей объекта класса как параметра во время перехода на другую страницу. Frame.Navigate(typeof(Page), DS); Где DS это то, что мы хотим передать, а Page та страница на которую переходим.

понедельник, 24 февраля 2020 г.

Как программно поставить указатель в TextBox?

#c_sharp #uwp


Делаю что-то вроде анкеты, в которой необходимо заполнить все поля. Как сделать,
чтобы по нажатию кнопки, если не заполнено какое либо поле, в него переместился курсор?
    


Ответы

Ответ 1



Нет ничего проще: textBox1.Focus(FocusState.Programmatic);

пятница, 24 января 2020 г.

Создание 100% кроссплатформенной библиотеки

#c_sharp #uwp


Случилось несчастье - мне необходимо написать приложение на UWP. Разумеется, проектирую
все по модели MVC. Тестировать и разрабатывать модели мне намного удобнее в консольном
приложении, и так часто случается, что те классы, которые прекрасно работали для консольного
app не находят определения классов в приложении UWP и наоборот. Так как писать максимально
кроссплатформенно? 

Я понимаю, например, класс для работы с камерой может не работать в консольном приложении,
но чтобы не работали классы шифрования или сериализации...тут уж прошу простить меня
- в ад разработчиков этого всего!

У меня есть библиотека, но при ее подключении мне вылетает ошибка:



Если же я создаю переносимую библиотеку и указываю целевую платформу UWP, то он не
знает о существовании таких классов как: BinaryFormatter, Aes, AesCryptoServiceProvider,
CryptoStream, Serializable. Это, в принципе, логично, потому что их не удосужились
добавить в UWP! Кроме как писать свои алгоритмы реализации, можно как-то перенести
эти классы? Существует ли хоть какая-то кроссплатформенность???
    


Ответы

Ответ 1



Бинарная сериализация существенно зависима от рефлексии и динамической генерации кода, поэтому она, к сожалению, недоступна в ограниченных подмножествах .NET (UWP/Silverlight/.NET Core). Возможно, имеет смысл перейти на XML-сериализацию или DataContractSerializer. А с криптографией всё не так плохо! Просто она «переехала» в другой namespace. Вам нужно использовать SymmetricKeyAlgorithmProvider.OpenAlgorithm с одним из AES-параметров, полный список тут. Возможно, эта часть кода не будет легко переносима на десктоп. Для этого по идее в Universal App можно выделить общую и платформозависимую части.

Передавать и принимать поток. Socket

#c_sharp #сокет #xaml #uwp #потоки_данных


Записываю картинку с камеры в поток:

var stream = new InMemoryRandomAccessStream();
await _mediaCapture.StartRecordToStreamAsync(encodingProfile,stream);


Задача: как-то разбить этот на байты и передать его по сокету, а на приеме снова
создать поток? Получается своего рода трансляция.

Поток необходимо шифровать и дешифровать с помощью aes. Метод шифрования реализован,
принимает массив байт. Как передать туда поток?
    


Ответы

Ответ 1



Вот такой код получается: private async Task SendStreamAsync(MediaEncodingProfile encodingProfile, MediaCapture mediaCapture) { var socket = new DatagramSocket(); var outputStream = await socket.GetOutputStreamAsync(new HostName("example.com"), "12345"); var writeOnlyStream = new WriteOnlyStreamStream(outputStream); await mediaCapture.StartRecordToStreamAsync(encodingProfile, writeOnlyStream); return new CompositeDisposable {writeOnlyStream, outputStream, socket}; } private sealed class WriteOnlyStreamStream : IRandomAccessStream { readonly IOutputStream _outputStream; public WriteOnlyStreamStream(IOutputStream outputStream) { _outputStream = outputStream; } public IInputStream GetInputStreamAt(ulong position) { throw new NotSupportedException(); //or we can return empty stream } public IOutputStream GetOutputStreamAt(ulong position) { return _outputStream; } public ulong Size { get { return 0; } set { } } public bool CanRead => false; public bool CanWrite => true; public IRandomAccessStream CloneStream() { throw new NotSupportedException(); } public ulong Position => 0; public void Seek(ulong position) { } public void Dispose() { this._outputStream.Dispose(); } public IAsyncOperationWithProgress ReadAsync(IBuffer buffer, uint count, InputStreamOptions options) { throw new NotSupportedException(); } public IAsyncOperationWithProgress WriteAsync(IBuffer buffer) { return _outputStream.WriteAsync(buffer); } public IAsyncOperation FlushAsync() { return _outputStream.FlushAsync(); } } Что здесь происходит: Создали Udp сокет (в нем пакеты будут теряться, биться, никакой целостности) Создали спец-класс обертку, чтобы пропихнуть IOutputStream внутрь MediaCapture. Здесь есть варианты, можно вместо исключений возвращать пустой IInputStream Создали IDisposable, который надо будет закрыть после всех операций (используем Reactive Extensions). Как правильнее посоветовали в вопросах, здесь лучше использовать TCP сокеты. Для клиентской части будет всё 1-в-1, только классы немного поменяются. Для серверной части надо использовать класс StreamSocketListener (он есть в uwp), с которого уже слушать какой-нибудь порт.

воскресенье, 12 января 2020 г.

Как определить тип устройства?

#c_sharp #uwp


Надо чтобы приложение переходило в полноэкранный режим только на телефонах.
Пробовал только так. 

ApplicationView view = ApplicationView.GetForCurrentView();
view.TryEnterFullScreenMode();


Но, логично, так в полный экран будет переходить и при запуске на PC и на телефоне.
А отслеживать размер экрана на котором запускается приложение, как по мне - криво...
Может есть какой нибудь более простой способ указать, что на телефонах должен быть
полный экран?
    


Ответы

Ответ 1



Проверить тип устройства, на котором запущено приложение, можно так: var platform = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily; if (platform == "Windows.Mobile") { ... } Другие возможные значения: Windows.Desktop (если UIViewSettings.GetForCurrentView().UserInteractionMode == UserInteractionMode.Mouse, то десктоп, иначе планшет) Windows.Universal (это IoT устройство) Windows.Team (это surface hub) Правда Microsoft не рекомендует использовать это свойство. Официальная политика такова, что вам не должно хотеться кастомизировать приложение в зависимости от платформы.

пятница, 10 января 2020 г.

Visual Studio Windows Phone 10. Исключение - BadImageFormatException

#c_sharp #sqlite3 #uwp #windows_10_mobile


Во время запуска универсальной программы Windows10 на телефоне, происходит исключение
BadImageFormatException. На MSDN написано, что выдается при недопустимом образе файла
библиотеки динамической компоновки (DLL) или выполняемой программы. Исключение происходит
в строках:

path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "MyDB.db");
conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(),
path);


Я правильно понимаю, что на телефоне, нужно по другому указать путь к локальным файлам?
Если да, то какой путь нужно указывать (path)?
    


Ответы

Ответ 1



Подключаться правильно нужно так: await ApplicationData.Current.LocalFolder.GetFileAsync("MyDB.db"); Connection = new SQLiteAsyncConnection("MyDB.db"); Тут есть гайд

Отсутствуют некоторые методы в System.Net.HttpWebRequest

#c_sharp #net #uwp


Слева - ConsoleApplication, справа - WindowsUniversalAppication.
Подскажите, что нужно сделать, чтобы справа был такой же набор методов, как слева?
    


Ответы

Ответ 1



На UWP многие методы существуют только в асинхронном виде. Вместо GetResponse() следует использовать await GetResponseAsync().

четверг, 9 января 2020 г.

UWP как сделать отбрасывание тени для объектов?

#c_sharp #uwp


Надо сделать у кнопки отбрасывание тени. DropShadowEffect не доступен в UWP. Как
быть? Неужели градиентом рисовать...
    


Ответы

Ответ 1



spriteVisual (в code-behind) или создать контейнер для твоего спрайтавизуала перед Button Подробнее можешь почитать тут: https://stackoverflow.com/questions/41303196/how-to-create-a-drop-shadow-effect-for-the-button-in-uwp

Ответ 2



Благодаря UWP Community Toolkit сделать это проще простого

понедельник, 6 января 2020 г.

сборка проектов Visual Studio 2017

#c_sharp #visual_studio #uwp #visual_studio_2017


такой вопрос: допустим, я включил какой-либо фреймворк в проект через нугет, но использую
из него всего лишь некоторую часть. те компоненты, которые я не использую, студия будет
включать в установочные пакеты приложения при сборке ? Просто, возможно, если фреймворк
вестит 5 - 8 мегабайт, а использую я из него 2 - 3 десятка классов, не более, есть
смысл просто скопировать эти классы в код, не добавляя сам фреймворк, чтобы он место
не забирал ? 
    


Ответы

Ответ 1



те компоненты, которые я не использую, студия будет включать в установочные пакеты приложения при сборке? Да. есть смысл просто скопировать эти классы в код, не добавляя сам фреймворк, чтобы он место не забирал ? Если исходный код доступен и его лицензия позволяет так делать, то можете так сделать. Иначе я бы не советовал. А вообще вы пытаетесь экономить на спичках.

четверг, 2 января 2020 г.

Цвет строки заголовка

#c_sharp #xaml #uwp #windows_10


Как в uwp программно изменить цвет строки заголовка?



Спасибо.
    


Ответы

Ответ 1



using Windows.UI; using Windows.UI.ViewManagement; ... var view = ApplicationView.GetForCurrentView(); view.TitleBar.BackgroundColor = Colors.DarkGreen; Другие возможности по кастомизации цвета тут.

пятница, 27 декабря 2019 г.

Измерение магнитной индукции сенсорами смартфона

#c_sharp #windows #uwp #windows_10 #windows_phone_8


Я не сильна в физике и, в связи с этим, у меня возник вопрос о том, как программно
реализовать измерение магнитной индукции сенсорами мобильных устройств? В частности,
как можно реализовать это на устройствах на базе Windows Phone и Windows 10 Mobile?
    


Ответы

Ответ 1



К магнитометру на Windows 10 Mobile можно легко получить доступ с помощью такого простого кода: var magnetometer = Windows.Devices.Sensors.Magnetometer.GetDefault(); if (magnetometer != null) { magnetometer.ReportInterval = 500; magnetometer.ReadingChanged += (Magnetometer sender, MagnetometerReadingChangedEventArgs args) => { System.Diagnostics.Debug.WriteLine("X: {0} Y: {1} Z:{2}", args.Reading.MagneticFieldX, args.Reading.MagneticFieldY, args.Reading.MagneticFieldZ); }; } Как из данного вектора получить гауссы или теслы, оставлю для исследования Вам. Проверял на Lumia 950, подносил неодимовый магнит (достаточно мощный), магнитометр начинает реагировать на него сантиметров с 15, но данные меняются немного стохастически (но меняются 100%). С большой степенью вероятности, будет работать и на других W10M телефонах. Касательно же точности и чувствительности сенсора, встроенного в телефон, я не уверен (нет данных); если есть потребность в высокой точности, то, боюсь, придется использовать внешний высокоточный сенсор с микрокопьютером типа RaspberyPi (а связь с телефоном организовать через TCP/IP или BT).

среда, 25 декабря 2019 г.

Работа со звуком в приложениях Windows 10

#c_sharp #net #uwp #windows_10


В проекте UWP при использовании MediaElement, когда сворачиваешь окно проигрывание
трека останавливается. В сети пишут что нужно использовать BackgroundMediaPlayer, только
хотелось бы объяснений как его использовать. Или есть какой-то другой способ решения
этой проблемы? 
    


Ответы

Ответ 1



Вкратце: да, нужно использовать BackgroundMediaPlayer плюс имплементировать IBackgroundTask. Это входная точка для работы приложения, когда оно свернуто. Позволит управлять произведением музыки в свернутом состоянии. У Microsoft есть официальный пример.

понедельник, 16 декабря 2019 г.

Контракт Share в UWP

#c_sharp #xaml #uwp


Как реализовать кнопку "Поделиться" в UWP проекте?
    


Ответы

Ответ 1



Курите статью Add Sharing to your UWP App. По минимуму: Добавить кнопку: Добавить в обработчик нажатия вызов ShowShareUI: private void AppBarButton_Click(object sender, RoutedEventArgs e) { Windows.ApplicationModel.DataTransfer.DataTransferManager.ShowShareUI(); } Добавить обработку запроса на расшариваемые данные: Windows.ApplicationModel.DataTransfer.DataTransferManager.GetForCurrentView() .DataRequested += MainPage_DataRequested; void MainPage_DataRequested(Windows.ApplicationModel.DataTransfer.DataTransferManager sender, Windows.ApplicationModel.DataTransfer.DataRequestedEventArgs args) { if(!string.IsNullOrEmpty(ContentText.Text)) { args.Request.Data.SetText(ContentText.Text); args.Request.Data.Properties.Title = Windows.ApplicationModel.Package.Current.DisplayName; } else { args.Request.FailWithDisplayText("Nothing to share"); } }

среда, 11 декабря 2019 г.

Как узнать имя пользователя или email в onedrive sdk?

#c_sharp #uwp #windows_10 #onedrive


Как, используя OneDriveClientExtensions, узнать имя отображаемое пользователя или email.

string[] scopes = { "onedrive.readwrite" };
IOneDriveClient OneDriveClient = OneDriveClientExtensions.GetUniversalClient(scopes);
await OneDriveClient.AuthenticateAsync();

    


Ответы

Ответ 1



Напрямую, используя данную библиотеку, не получить данные пользователя. Но из неё можно получить AccessToken, а затем, используя его, получить данные пользователя при помощи REST API. Имя пользователя можно получить примерно так: string[] scopes = new string[] { "onedrive.readwrite" }; var client = OneDriveClientExtensions.GetUniversalClient(scopes) as OneDriveClient; await client.AuthenticateAsync(); // забираем access_token var AccessToken = client.AuthenticationProvider.CurrentAccountSession.AccessToken; // запрашиваем данные авторизованного пользователя REST API var uri = new Uri($"https://apis.live.net/v5.0/me?access_token={AccessToken}"); var httpClient = new System.Net.Http.HttpClient(); var result = await httpClient.GetAsync(uri); // получаем данные пользователя в JSON и разбираем его string jsonUserInfo = await result.Content.ReadAsStringAsync(); if (jsonUserInfo != null) { var json = Newtonsoft.Json.Linq.JObject.Parse(jsonUserInfo); string username = json["name"].ToString(); } Email можно получить примерно так (не забудьте добавить wl.emails в список разрешений scopes) string[] scopes = new string[] { "onedrive.readwrite", "wl.emails" }; var client = OneDriveClientExtensions.GetUniversalClient(scopes) as OneDriveClient; await client.AuthenticateAsync(); var AccessToken = client.AuthenticationProvider.CurrentAccountSession.AccessToken; var uri = new Uri($"https://apis.live.net/v5.0/me?access_token={AccessToken}"); var httpClient = new System.Net.Http.HttpClient(); var result = await httpClient.GetAsync(uri); string jsonUserInfo = await result.Content.ReadAsStringAsync(); if (jsonUserInfo != null) { var json = Newtonsoft.Json.Linq.JObject.Parse(jsonUserInfo); string username = json["name"].ToString(); string email = json["emails"]["account"].ToString(); }

четверг, 28 ноября 2019 г.

В чем разница между NetFramework и NetCore

#c_sharp #.net #uwp


При попытке подключить библиотеку к uwp приложению получил вот такое предупреждение:
"Проект предназначен для ".NetCore", в то время как ссылка файла предназначена для
".NetFramework""

Вроде, и то платформа, и то платформа, так в чем разница, зачем их две и возможна
ли связь между ними (подключать одно к другому и наоборот)?
    


Ответы

Ответ 1



.NET Framework - это старая платформа, работающая только под Windows. .NET Core - это новая платформа, которая может работать как под Windows, так и под Linux. Но она еще довольно "сырая" - множество инструментов еще не перенесены на нее. Подключить одно к другому не получится, потому что у них разные системные библиотеки (а также разные системы сборки если вы используете Visual Studio версии 2015 или ниже). Кроме них, есть еще платформы: Mono - может работать как под Windows, так и под Linux. Пытается быть совместимой с .NET Framework. UWP - платформа для написания Windows-приложений, использующих WinRT. Не знаю про совместимость с .NET Framework. Silverlight - старая платформа (застряла примерно на уровне .NET 4.5), предназначенная для работы в браузере (вроде java-апплетов). Не так давно была серьезно ранена гуглом, который перестал поддерживать NPAPI в своем Хроме. Не совместима с .NET Framework. .NET Compart Framework - несовместимая вариация .NET Framework для Windows CE. Сейчас находится на той же свалке, куда был выброшен Windows CE. Unity - форк Mono, платформа для написания графических (в том числе 3D) приложений. Есть вариант встраивания в браузер (не работает в Хроме из-за отказа от NPAPI в Хроме работает благодаря технологии Web Assembly). PCL (Portable Class Library) - общее подмножество разных версий .NET Framework, UWP и Silverlight. Совместима с ними в одну сторону (PCL-библиотеку можно использовать на перечисленных платформах). .NET Standard - новая реинкарнация PCL. От PCL отличается подходом к версионированию: если для PCL разработчик библиотеки выбирает список поддерживаемых платформ, то для .NET Standard выбирается версия стандарта (а для платформ известно какие версии ими поддерживаются).

Ответ 2



Если посмотреть какие версии NetStandard поддерживает UWP https://habrahabr.ru/post/312026/ То увидим, что это 1.4. Текущая максимальная версия 1.6 https://msdn.microsoft.com/ru-ru/magazine/mt590967.aspx Наконец, .NET Core — это нижележащая инфраструктура, от которой зависит .NET Native. Когда проектировали .NET Native, стало понятно, что .NET Framework не подойдет в качестве фундамента для библиотек классов этой инфраструктуры. Дело в том, что .NET Native статически связывает инфраструктуру с приложением, а затем удаляет все лишнее, что не нужно приложению. (Здесь я сильно упрощаю общую картину, но идею вы уловили. Подробнее на эту тему см. «Inside .NET Native» по ссылке bit.ly/1UR7ChW.) Традиционная реализация .NET Framework не предусматривает разбиения на модули, поэтому компоновщик (linker) не может включить в приложение лишь ту часть инфраструктуры, которая нужна приложению. Но .NET Core, по сути, является ответвлением .NET Framework, реализация которой оптимизирована с учетом модульности. Другое преимущество этой реализации — возможность поставлять .NET Core Framework как набор NuGet-пакетов, что позволяет вам обновлять индивидуальные классы вне самой .NET Framework. Однако, прежде чем двигаться дальше, давайте обсудим изменения в NuGet. ПО UWP ориентировано на .Net Core, поэтому не совместимо с библиотеками .NET Framework

понедельник, 15 июля 2019 г.

Обратиться к родительскому элементу Xaml

Есть следующая структура





Смысл в том, чтобы когда тянешь за Border изменял размер его родительский Grid
Не могу к нему обратиться из кода
Пробовал так
var container = sender as Border; container = (FrameworkElement)VisualTreeHelper.GetParent(container);
var ct = (CompositeTransform)(container as Grid).RenderTransform;// получаю Null Reference //Или так var ct = (CompositeTransform)container.RenderTransform;// получаю Не может преобразовать MatrixTransform to RenderTransform


Ответ

Сделал так чтобы тащить нужно было Grid, но только только тогда, когда курсор именно на бордере. Для это использовал события Poiner_Entered и _Exited. Получается так что мы тащим Grid, но из-за того что он там же где и Border, то визульно кажется что тащим все таки Border. Единственный нюанс, так это картинка мерцает
Для определения, что Border видно использовал:
var grid = sender as Grid; var child = (FrameworkElement)VisualTreeHelper.GetChild(grid,3);
3 это индекс контрола сверху вниз, как на рзметке

пятница, 12 июля 2019 г.

Как получить доступ к интерфейсу ICloneable в проекте типа - библиотека классов?

Я создал проект C# типа - библиотека классов . После чего, создал в нем файл с классом и попытался унаследоваться от класса ICloneable. VisualStudio 2017 подчеркнула имя ICloneable, указав на то что есть ошибка. В предложенных VisualStudio решениях данной проблемы предлагается самому создать данный интерфейс.
Другими словами интерфейс ICloneable недоступен/не создан.
В документации говорится что данный класс доступен по умолчанию в пространстве имен - using System; Но по факту для проекта типа - библиотека классов, это правило не работает. Поскольку пространство имен "System" подключено к моему файлу.
Ради интереса, я создал консольный проект и попытался в нем унаследоваться от интерфейса ICloneable. В итоге, в данном типе проекта интерфейс был доступен и все прекрасно работало. Выходит что вся загвоздка в типе созданного проекта.
Как получить доступ к интерфейсу ICloneable в проекте типа - библиотека классов?
Мой код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace UrlBuilder.Url.Sections.ProductModels.Transport.Cars { public class Class1 : ICloneable { public Class1 Clone() { return new Class1(); } } }
Как видите в VisualStudio 2017 этот код вызывает ошибку:


Ответ

В проектах UWP интерфейс ICloneable появился с поддержкой .NET Standard 2.0, начиная с версии Windows 10 Fall Creators Update (10.0, Build 16299).
Для того, чтобы ICloneable появился - указать Min Version 16299, или при создании нового проекта, или в свойствах для уже существующего.

четверг, 11 июля 2019 г.

Как кастомизировать SearchBox?

Как можно сделать выдачу результатов так же, как История в SearchBox? То есть, выпадающий список при вводе текстовых данных. И, в дополнение, кастомизировать найденный список, как например ListView, добавив туда имейджи и другой контент.


Ответ

Используйте AutoSuggestBox вместо SearchBox. Для кастомизации выпадающего списка используйте ItemTemplate. В нем уже можете вставлять что угодно.

понедельник, 17 июня 2019 г.

Как сделать нормальное поисковое поле?

Здравствуйте! У меня на фрейме есть AutoSuggestBox. На событие изменения текста навешен такой код:
private void AsbSearch_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { _timer.Stop(); _timer.Start(); }
Интервал у таймера равен 100 миллисекундам. Вот код, выполняемый при тике:
private void _timer_Tick(object sender, object e) { _timer.Stop(); if (string.IsNullOrEmpty(AsbSearch.Text) || AsbSearch.Text == " ") { return; } AsbSearch_QuerySubmitted(AsbSearch, null); }
Так вот, теперь все это плохо работает, поскольку поиск начинается несколько раз при вводе одного слова(быстрого ввода), причем первый поиск начинается примерно после ввода 3-4 символов. Как мне решить эту проблему? Можно конечно оставить начало поиска лишь на нажатие Enter-а или соответствующей кнопки, но это нежелательно.
Обновление
По сути мне надо выходить из AsbSearch_QuerySubmitted(AsbSearch, null); при изменении запроса. Но как это сделать? Пробовал использование булевой переменной с периодической проверкой, но нет, все точно также.


Ответ

А если с таймером, то так пытались или иначе?
private bool _searching = false;
...
private void _timer_Tick(object sender, object e) { _timer.Stop(); //У нас уже идет поиск, выходим, даже текст смотреть не будем: if (_searching) return;
if (string.IsNullOrEmpty(AsbSearch.Text) || AsbSearch.Text == " ") { return; } //Устанавливаем флаг того. что поиск начат: _searching = true; //Ищем: AsbSearch_QuerySubmitted(AsbSearch, null); //Поиск закончен.... _searching = false;
}
UPD: Вариант без таймера:
private string _PrevText = string.Empty; ... private void AsbSearch_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { //Текущий текст для поиска: string _CurrentText = AsbSearch.Text;
//Если предыдущий текст для поиска уже пустой, то можем искать текущий: if (string.IsNullOrEmpty(_PrevText)) { //Запоминаем в переменную предыдущего поиска значение для текущего поиска _PrevText = _CurrentText; //Ищем: AsbSearch_QuerySubmitted(AsbSearch, null); //После того, как поиск выполнен, очищаем переменную предыдущего поиска. _PrevText = string.Empty; } }