通用显示 xaml

Posted

技术标签:

【中文标题】通用显示 xaml【英文标题】:Generic display xaml 【发布时间】:2017-02-27 01:40:43 【问题描述】:

有没有一种方法可以让我在一行中显示多个项目而无需对 xaml 进行硬编码,例如我有一个有 8 个字段的类,在运行时,一个或多个字段不会为空。所以意思是我在开发人员时不知道哪些字段将为空而不是空。因此,不会显示空值,并且将隐藏所有空值而不是硬编码界面(xaml)我正在寻找一种显示值的通用方式..我有一个可行的解决方案,但有很多硬编码..WinRT

例如我的班级可以是这样的

Class

xaml 的设计方式是我从代码中设置语言的可见性。如果用户选择显示英文和中文,则语言类中中文的可见性设置为true,界面将根据用户的选择在每行显示一个中英文短语

【问题讨论】:

有很多方法可以解决这个问题。您需要相当地缩小问题范围。模板是处理“不对 XAML 进行硬编码”的方法。您可以创建一个模板,该模板的样式带有一个触发器,如果​​值为 null,则该触发器会隐藏项目。请尝试某事。然后,如果您遇到问题,请发布一个新问题,其中包含一个很好的 minimal reproducible example,清楚地显示您尝试过的内容,并清楚准确地解释具体您遇到的问题。 好的,我明白你想展示什么了。不用担心,您无需提供工作项目或 Google 搜索历史即可在 *** 上提问。请参阅下面的答案。 【参考方案1】:

如果您像这样构建表单:

<StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="Binding FirstName, Converter=StaticResource CollapsedWhenNullConverter">
        <TextBlock Text="First Name:" />
        <TextBlock Text="Binding FirstName" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="Binding LastName, Converter=StaticResource CollapsedWhenNullConverter">
        <TextBlock Text="Last Name:" />
        <TextBlock Text="Binding FirstName" />
    </StackPanel>
</StackPanel>

您可以编写转换器 CollapsedWhenNullConverter 以在值为 null 时返回 Collapsed 并在值不为 null 时返回 Visible。像这样:

class CollapsedWhenNullConverter : IValueConverter

    public object Convert(object value, Type targetType, object parameter, string language)
    
        return (value == null) ? Visibility.Collapsed : Visibility.Visible;
    

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    
        throw new NotImplementedException();
    

这将为您隐藏空字段,如果这确实是您想要的。也没有什么可以阻止您创建等效的自定义 VisibleWhenTrue 转换器。这取决于您的数据,但这应该让您开始使您的显示动态化。

【讨论】:

以上是关于通用显示 xaml的主要内容,如果未能解决你的问题,请参考以下文章

uwp通用应用布局触发器AdaptiveTrigger

UWP 或 XAML 导航视图突出显示 [关闭]

Windows Phone 8.1 通用应用程序在从第二页返回时终止?

Wpf:通用集合依赖属性

uwp通用应用重写列表面板控件

通用应用程序打不开