我正在编写一个Phone 7应用程序,我想在标记中引用常量值.我相信应该这样做的方式是通过
x:Static.
但是,Visual Studio不断声称它不知道x:static.这里有什么秘密酱?我有以下几点:
<phone:PhoneApplicationPage ... xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ... <Image Height="{x:Static App.ImageHeight}" ... /> ...
而且当然:
public partial class App : Application { public const double ImageHeight = 100; ...
错误消息是“类型”x:没有找到静态“验证…”.
解决方法
x:静态仅在WPF中可用 – 浏览器的Silverlight或Windows Phone 7的Silverlight都不支持此标记扩展名.
通常的解决方法是创建一个(非静态)类,该类具有简单包装所需静态属性的属性,并创建一个实例作为资源,并以此方式绑定.
例*:
public class StaticSideEnums { public static Side Bid { get { return Side.Bid; } } public static Side Ask { get { return Side.Ask; } } }
在资源(app.xaml)中:
<ResourceDictionary> <local:StaticSideEnums x:Key="StaticSideEnums"/> </ResourceDictionary>
在使用它的xaml中:
<toolkit:ListPicker Name="picker" SelectionChanged="OnSelectionChanged"> <toolkit:ListPickerItem Content="Buy" Tag="{Binding Bid,Source={StaticResource StaticSideEnums}}" /> <toolkit:ListPickerItem Content="Sell" Tag="{Binding Ask,Source={StaticResource StaticSideEnums}}" /> </toolkit:ListPicker>
*这个例子取自Using localized strings in a ListPicker populated from Enum的答案