如何在手机上隐藏元素?

时间:2014-05-06 19:26:49

标签: winrt-xaml win-universal-app

我们的想法是,您在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隐藏在手机上但在平板电脑上可见?

1 个答案:

答案 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,因此这没有实际意义。