我是.NET编程的新手,并且正在尝试学习Silverlight 2 / C#。
我需要声明数字常量(或者更好的是,只读变量),并在XAML和我的C#代码隐藏文件中访问它们。
这些值在XAML中更适当地定义,但如果定义需要在C#中完成,那么比在几个地方对值进行硬编码更好。
我找到了WPF XAML的解决方案,但Silverlight显然不支持语法(我发现解决方案要求定义在C#文件中)。
TIA!
回复迈克尔
我将此回复添加为对原始问题的评论,因为评论编辑器不允许我添加这么多文字,而我找不到其他方式来回复您的答案。
谢谢你的回答,迈克尔,但我似乎无法让它发挥作用。
我首先来自“c#2008中的Pro Silverlight 2”中的一个例子。 该示例工作正常,但要求我在我的XAML中的两个位置硬编码相同的两个值,并在C#中一个位置。
我实现了你的解决方案,一切都很好,但是当我尝试执行代码时,我在浏览器中出现了页面错误。我删除了所有更改,并验证事情再次运行良好。
然后我将xmlns:sys声明和sys:Int32声明添加到我的App.xaml文件中。一切都运行良好,但当我试图在VS2008中查看Page.xaml文件时,我得到一个奇怪的错误:
未声明的前缀[行:6位置:30] - Page.xmal,第1行,第1列
预览页面为空白。
在Page.xaml的第6行Col 30上没有任何有趣的内容,但是在App.xaml文件中,该位置在整数值8之前包含结束“>”:
<sys:Int32 x:Key="QAPS">8</sys:Int32>
但是,如果我点击了F5,那么该应用在浏览器中运行正常。
我正在运行VS2008 SP1和Mar 09 Silverlight工具包。
我无法理解为什么App.xaml应用程序资源部分中的QAPS声明可能会导致,特别是考虑到我在应用程序的任何位置都没有引用它。你知道可能会发生什么吗?
对Michael的另一个回复
你是对的,我没有将xmlns:sys声明添加到我的Page.xaml,但添加它没有区别 - 我仍然得到'未声明的前缀[Line:6 Position:30]'错误在Page.xaml中(应用程序仍在运行)。由于一切运行正常,我想这肯定是VS2008中的一个问题。
更大的问题是,当我尝试从C#访问QAPS时,我遇到了运行时异常,并且我已经弄清楚我做错了导致它。问题是我显然在它存在之前访问了资源。
我已经声明/初始化了一个私有变量来保存类级别的资源值;当我将初始化移动到事件处理程序时,问题就消失了。所以我猜测在创建XAML资源之前会评估C#类级变量。
(顺便说一句,对评论的600个字符限制是一个真正的痛苦。事实上,我必须编辑我的原始问题以发布回复。)
答案 0 :(得分:19)
将它们放入您的应用程序或页面资源中:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Application.Resources>
<sys:Int32 x:Key="QPS">8</sys:Int32>
</Application.Resources>
</Application>
然后您可以通过以下代码访问它们:
if (Application.Current.Resources.Contains("QPS"))
{
int callsPerSecond = (int) Application.Current.Resources["QPS"];
}
并通过像这样的Xaml
<TextBlock Text="{StaticResource QPS}"/>