Идеята е следната, вие създавате универсално приложение WinRT-XAML в Visual Studio 2013 Update 2 за Windows 8.1-Update и 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
на родителя на бутона с някаква стойност, конверторът няма да се задейства. Можете да решите това, като зададете DataContext="{x:Null}"
на бутона или неговия родител. Но в повечето случаи използвате MVVM
и вече сте задали DataContext, така че това е спорно.
person
Jerry Nixon
schedule
06.05.2014
Това ли е препоръчителното нещо и за командните ленти? Нямам много опит с тях, но мисля, че видях, че те трябваше автоматично да преформатират към контекст/падащо меню, когато няма свободно място?
- person Filip Skakun; 07.05.2014
Не мога да намеря по-добър начин освен отделен потребителски интерфейс. Боравенето с различни размери не е лесно. Много лошо. Това е, каквото е, предполагам.
- person Jerry Nixon; 07.05.2014
Наблюдавам възможности за нови отзивчиви контроли за оформление... :)
- person Filip Skakun; 07.05.2014