【问题标题】:How to declare empty string in Metro UI XAML如何在 Metro UI XAML 中声明空字符串
【发布时间】:2012-11-14 13:40:20
【问题描述】:

我正在尝试为 WinRT DataTriggers 中的缺失编写简单的替换,例如:

<dt:DataTrigger Property="Message" Value="">
    <dt:Setter TargetName="tbMessage" Property="Visibility" Value="Collapsed" />
</dt:DataTrigger>

所以我有在 XAML 中设置的属性 Value 的类 DataTrigger。我需要将值设置为 string.Empty。当我使用“”(空括号)时,值设置为 null,而不是 string.Empty。 我试图在资源中定义空字符串:

<x:String x:Key="EmptyString"></x:String>

并像使用它

<dt:DataTrigger Property="Message" Value="{StaticResource EmptyString}">
    <dt:Setter TargetName="tbMessage" Property="Visibility" Value="Collapsed" />
</dt:DataTrigger>

值仍然设置为空。我也尝试过使用下一个代码:

xmlns:sys="using:System" ... <sys:String x:Key="EmptyString"></sys:String>

此代码抛出异常“在 mscorlib.dll 中发生了类型为 'Windows.UI.Xaml.Markup.XamlParseException' 的异常,但未在用户代码中处理

WinRT 信息:找不到类型“字符串”。"

无法使用使用 &lt;x:Static Member="sys:String.Empty" /&gt; 的方法,因为在 WinRT 中缺少 x:Static

甚至可以在 WinRT XAML 中声明一个空字符串吗?

【问题讨论】:

  • 你试过用="{x:Null}" 吗?
  • 是的,然后我的 Value 属性按预期设置为 null,但我需要空字符串 :)

标签: c# xaml microsoft-metro windows-runtime winrt-xaml


【解决方案1】:

试试这个

<TextBlock Text="{x:Static System:String.Empty}" Name="emptyString"/>

【讨论】:

  • 不幸的是 x:Static 仅存在于 WPF 中,而不存在于 WinRT 中。
  • 对不起,没有签入 Win8。如果您尝试更改触发器,例如 ':DataTrigger>' ?
  • 是的,在这种特殊情况下,使用 Message.Length 可以解决我的问题。但是我不能使用它的原因有两点:
  • 我能想到的唯一选择 - 制作 {Binding} 扩展并通过它解决您的问题。
  • 是的,就我而言,使用 Message.Length 可以解决问题。但是我不能使用的原因有两点: 1.Message可以设置为null,所以Length不能访问; 2.在DataTrigger代码中,如果DataTrigger的所有者实现了INotifyPropertyChanged,我订阅了OnPropertyChanged,这样我就可以跟踪消息的变化并应用Setter,但是字符串(长度属性的所有者类型)不实现这个接口;目前,我已经通过检查属性的类型是否为字符串并且值是否为 null 来解决我的问题,如果是,我将用 string.Empty 替换 null 值,但对我而言,这样的代码有点味道 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 2013-05-25
  • 2018-10-22
  • 1970-01-01
  • 2011-09-27
  • 2010-11-28
相关资源
最近更新 更多