Идея заключается в том, что вы создаете универсальное приложение WinRT-XAML в Visual Studio 2013 с обновлением 2 для Windows 8.1 с обновлением и Windows Phone 8.1. Вы используете одно и то же представление XAML для телефонов и планшетов. Вы используете конвергентный элемент управления CommandBar для отображения кнопок пользователю. В вашем приложении для Windows у вас есть 5 основных кнопок, но пользовательский интерфейс Windows Phone поддерживает только 4. Когда вы запускаете свое приложение в Windows Phone, вы понимаете, что 5-я кнопка удалена, но она удаляет кнопку завершения, а средняя кнопка — это та, которую вы хотите чтобы удалить. Вы не хотите менять порядок кнопок. Каковы ваши варианты, чтобы один UIElement был скрыт на телефоне, но виден на планшете?
Как скрыть элемент, когда он на телефоне?
Ответы (1)
Вы можете справиться с этим многими способами. Если вам нужен надежный и многоразовый подход, вы можете использовать преобразователь видимости кнопки, которую хотите скрыть. XAML будет примерно таким:
<Page.Resources>
<Converters:HiddenWhenPhoneConverter x:Name="HidePhone" />
</Page.Resources>
<Button Visibility="{Binding, Converter={StaticResource PhoneHide}}" />
Тогда у вас будет конвертер примерно такой:
public class HiddenWhenPhoneConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
#if WINDOWS_PHONE_APP
return Visibility.Collapsed;
#else
return Visibility.Visible;
#endif
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{ throw new NotImplementedException(); }
}
public class VisibleWhenPhoneConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
#if WINDOWS_PHONE_APP
return Visibility.Visible;
#else
return Visibility.Collapsed;
#endif
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{ throw new NotImplementedException(); }
}
Помните: с точки зрения производительности это будет выполняться только при загрузке представления. Таким образом, это должно быть минимальное воздействие и дать вам желаемые результаты. Есть еще одна вещь. Если вы не установили Button
или DataContext
родительского элемента Button с каким-либо значением, преобразователь не сработает. Вы можете решить эту проблему, установив DataContext="{x:Null}"
для кнопки или ее родителя. Но в большинстве случаев вы используете MVVM
и уже установили DataContext, так что это спорно.