#silverlight #windows-phone-7
#silverlight #windows-phone-7
Вопрос:
У меня есть страница, на которой отображается либо одно из нескольких изображений, либо кнопка. При нажатии на кнопку я скрываю ее и показываю следующее изображение в списке. Нажатие на изображение приводит к его исчезновению и повторному отображению кнопки.
При быстром нажатии кнопки несколько раз подряд отображаемое изображение не реагирует на нажатие. Я предполагаю, что это связано с блокировкой потока пользовательского интерфейса, но я попробовал это с рабочим потоком и все еще не работает.
public void ShowNextImage()
{
image_new.Source = getCurrentBitmap();
workerThread.WorkerReportsProgress = true;
workerThread.WorkerSupportsCancellation = true;
workerThread.DoWork = new DoWorkEventHandler(worker_DoWork);
workerThread.RunWorkerCompleted = new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
workerThread.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
transition.Begin();
transition.Completed = delegate
{
transition.Stop();
};
});
}
void worker_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
// Happens on the UI thread so its ok
MessageBox.Show("Error occurred...");
}
}
Комментарии:
1. Можете ли вы улучшить это название, чтобы задать вопрос?
2. На какое событие вы подписаны на изображении?
3. Не могли бы вы, пожалуйста, показать какой-нибудь код, который демонстрирует, что вы делаете, и позволяет нам воссоздать проблему.
4. @Stuart: Извините, я новичок в этом stackoverflow в любом случае, спасибо за это.
5. @Richard Я хочу применить простое событие касания lki double_Tap Single_tap и т.д., Чтобы увеличить изображение или скрыть кнопку соответственно
Ответ №1:
Я рекомендую вам установить Windows Phone Toolkit из Codeplex и использовать GestureListener
. Это позволяет вам обнаруживать многие вещи, а не только Tap
и DoubleTap
, это также будет поддерживать изменение размера и перетаскивание.
Обязательно откройте исходный код в VS2010 и взгляните на GestureSample.xaml
вы, вероятно, могли бы просто перенести большую часть этого в свое приложение.
Комментарии:
1. Я использую GestureListener, но проблема в том, что эффекты перехода выполняются на изображениях, поэтому изображения не принимают никаких событий, поэтому я хочу знать, как остановить один переход, если на изображении начался другой переход.
Ответ №2:
Я предполагаю, что ваш код делегирования вызывает проблемы:
transition.Completed = delegate
{
transition.Stop();
};
Я предполагаю, что среди всех переключений контекста потока событие Completed запускается, когда вы только собираетесь начать следующий переход изображения.
Есть несколько вещей, которые вы могли бы попробовать, чтобы помочь с этим:
- определенно подписывайтесь на завершено только один раз за переход
- попробуйте использовать отдельные экземпляры перехода для каждого фактического перехода
- попробуйте защитить кнопку так, чтобы ее нельзя было нажать во время перехода
- попробуйте остановить переход самостоятельно (они не должны повторяться?)
- попробуйте реорганизовать логику перехода, чтобы она была не такой многопоточной (не уверен, что еще происходит в приложении — я понимаю, что это может быть не совсем возможно, если у вас происходит много других вещей)
- попробуйте использовать изменения состояния VisualStateManager вместо этих созданных вручную переходов
Не пробуйте их все вместе 🙂
Конечно, мое предположение может быть ошибочным… это может быть что-то другое…
Комментарии:
1. Просто запутал вас еще больше — добавил второй возможный ответ — извините!
2. Доступна ли какая-либо ссылка на их пример кода для VisualStateManager
3. На самом деле я новичок на этой платформе и просто пытаюсь устранить ошибку.
Ответ №3:
Читая это снова … другая возможность заключается в том, что что-то рисуется поверх кнопки и что это фиксирует события касания.
Одним из основных предложений является:
- избавьтесь от кода workerthread — вернитесь к простому коду пользовательского интерфейса
- выполните простую отладку.Код строки записи в обработчике Button_Click
Используя это, вы узнаете, продолжает ли кнопка реагировать на события нажатия или произошло что-то более сложное. Мой опыт показывает, что обычно кнопки продолжают работать на уровне нажатия, теперь не имеет значения, сколько раз вы нажимаете на них — значит, что-то еще идет не так либо в самой логике нажатия, либо в чем-то еще, отображаемом поверх кнопки, предотвращая ее нажатие.
Комментарии:
1. Да, нажатие кнопки работает, и оно по-прежнему отлично меняет изображение. Но когда я нажимаю или дважды касаюсь изображения, это не работает, потому что переход происходит на изображении