3

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

4

1 回答 1

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 或 Button 的父级设置DataContext一些值,转换器将不会触发。DataContext="{x:Null}"您可以通过设置Button 或其父级来解决此问题。但是,在大多数情况下,您正在使用MVVM并且已经设置了 DataContext,所以这没有实际意义。

于 2014-05-06T19:26:48.727 回答