我们的想法是,您在Visual Studio 2013 Update 2中为Windows 8.1-Update和Windows Phone 8.1创建了一个WinRT-XAML通用应用程序。您在手机和平板电脑平台之间共享相同的XAML视图。您正在使用融合的CommandBar控件向用户显示按钮。在Windows应用程序中,您有5个主按钮,但Windows Phone UI仅支持4.当您在Windows Phone中运行应用程序时,您意识到第5个按钮已被删除,但它会删除结束按钮,而中间按钮是您想要的按钮已删除。您不想重新排序按钮。您有什么选择可以将一个UIElement隐藏在手机上但在平板电脑上可见?
答案 0 :(得分:3)
你可以通过很多方式解决这个问题。如果您需要可靠且可重复使用的方法,可以使用转换器来隐藏要隐藏的按钮的可见性。 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
或Button的父级DataContext
设置为某个值,则转换器将不会触发。您可以通过在Button或其父级上设置DataContext="{x:Null}"
来解决此问题。但是,在大多数情况下,您使用的是MVVM
,并且已经设置了DataContext,因此这没有实际意义。