Измененная ориентация экрана MediaElement исчезает с экрана
У меня есть интересная проблема для моего проекта. Я работаю над ориентацией приложения, и моя проблема в том, что мой видеоэлемент исчезает, когда я меняю ориентацию экрана по горизонтали или по горизонтали. Я использую тот же код для моего изображения, и он работает правильно. Итак, я не понял, в чем проблема. Есть ли идея? Вот мой код;
Эта строка возвращает null для медиаэлемента:
MediaElement mediaControl = RecurseChildren<MediaElement>(fwQuestions).Where(p => p.Name == "myVideoElement" + elementOrder).FirstOrDefault();
Но эта строка та же структура, чтобы вернуть мое изображение правильно:
Image ImageController = RecurseChildren<Image>(fwQuestions).Where(p => p.Name == "QuestionImage" + elementOrder).FirstOrDefault();
Мои коды:
MediaElement myVideoElement = new MediaElement();
myVideoElement.Name = "myVideoElement" + currentQuestion;
myVideoElement.Width = (Window.Current.Bounds.Width * 0.2) - 10;
myVideoElement.Height = 300;
myVideoElement.Margin = new Thickness(10);
myVideoElement.Source = new Uri(AppConfiguration.TestVideoLink + questionVideoLink, UriKind.Absolute);
myVideoElement.AutoPlay = false;
myVideoElement.Margin = new Thickness(0, 10, 0, 10);
myVideoElement.AreTransportControlsEnabled = true;
myVideoElement.HorizontalAlignment = HorizontalAlignment.Center;
myVideoElement.Visibility = Visibility.Collapsed;
spMediaBody.Children.Add(myVideoElement);
DynamicGrid.Children.Add(spMediaBody);
pnlGeneralBody.Children.Add(DynamicGrid);
fwQuestions.Items.Add(pnlGeneralBody);
public static IEnumerable<T> RecurseChildren<T>(DependencyObject root) where T : UIElement
{
if (root is T)
{
yield return root as T;
}
if (root != null)
{
var count = VisualTreeHelper.GetChildrenCount(root);
for (var idx = 0; idx < count; idx++)
{
foreach (var child in RecurseChildren<T>(VisualTreeHelper.GetChild(root, idx)))
{
yield return child;
}
}
}
}
private void Page_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (IsPageLoadComplete)
{
for (int i = 0; i < AppConfiguration.QuestionList.allques.Count; i++)
{
string elementOrder = i.ToString();
Grid grdBody = RecurseChildren<Grid>(fwQuestions).Where(p => p.Name == "DynamicGrid" + elementOrder).FirstOrDefault();
MediaElement mediaControl = RecurseChildren<MediaElement>(fwQuestions).Where(p => p.Name == "myVideoElement" + elementOrder).FirstOrDefault();
if (mediaControl != null && mediaControl.Visibility == Visibility.Visible)
{
mediaControl.Width = (Window.Current.Bounds.Width * 0.2) - 10;
grdBody.ColumnDefinitions[0].Width = new GridLength((Window.Current.Bounds.Width * 0.2) - 5, GridUnitType.Pixel);
grdBody.ColumnDefinitions[1].Width = new GridLength((Window.Current.Bounds.Width * 0.8) - 5, GridUnitType.Pixel);
}
else
{
grdBody.ColumnDefinitions[0].Width = new GridLength((Window.Current.Bounds.Width * 0), GridUnitType.Pixel);
grdBody.ColumnDefinitions[1].Width = new GridLength((Window.Current.Bounds.Width * 1) - 10, GridUnitType.Pixel);
}
MediaElement AudioControl = RecurseChildren<MediaElement>(fwQuestions).Where(p => p.Name == "myAudioElement" + elementOrder).FirstOrDefault();
if (AudioControl != null && AudioControl.Visibility == Visibility.Visible)
{
AudioControl.Width = (Window.Current.Bounds.Width * 0.2) - 10;
grdBody.ColumnDefinitions[0].Width = new GridLength((Window.Current.Bounds.Width * 0.2) - 5, GridUnitType.Pixel);
grdBody.ColumnDefinitions[1].Width = new GridLength((Window.Current.Bounds.Width * 0.8) - 5, GridUnitType.Pixel);
}
else
{
grdBody.ColumnDefinitions[0].Width = new GridLength((Window.Current.Bounds.Width * 0), GridUnitType.Pixel);
grdBody.ColumnDefinitions[1].Width = new GridLength((Window.Current.Bounds.Width * 1) - 10, GridUnitType.Pixel);
}
Image ImageController = RecurseChildren<Image>(fwQuestions).Where(p => p.Name == "QuestionImage" + elementOrder).FirstOrDefault();
if (ImageController != null && ImageController.Visibility == Visibility.Visible)
{
ImageController.Width = (Window.Current.Bounds.Width * 0.2) - 10;
grdBody.ColumnDefinitions[0].Width = new GridLength((Window.Current.Bounds.Width * 0.2) - 5, GridUnitType.Pixel);
grdBody.ColumnDefinitions[1].Width = new GridLength((Window.Current.Bounds.Width * 0.8) - 5, GridUnitType.Pixel);
}
else
{
grdBody.ColumnDefinitions[0].Width = new GridLength((Window.Current.Bounds.Width * 0), GridUnitType.Pixel);
grdBody.ColumnDefinitions[1].Width = new GridLength((Window.Current.Bounds.Width * 1) - 10, GridUnitType.Pixel);
}
}
}
}