Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在silverlight中共享xaml和c#之间的数值常量_C#_Silverlight_Xaml_Silverlight 2.0 - Fatal编程技术网

如何在silverlight中共享xaml和c#之间的数值常量

如何在silverlight中共享xaml和c#之间的数值常量,c#,silverlight,xaml,silverlight-2.0,C#,Silverlight,Xaml,Silverlight 2.0,我是.NET编程新手,正在努力学习Silverlight 2/C 我需要声明数值常量(或者更好的是只读变量),并在XAML和我的C#代码隐藏文件中访问它们 这些值在XAML中定义得更合适,但是如果需要在C#中定义,那么这比在几个地方硬编码值要好 我找到了WPF XAML的解决方案,但Silverlight显然不支持语法(我找到的解决方案要求定义在C#文件中) 蒂亚 回复Michael 我将此回复作为对我原始问题的评论添加,因为评论编辑器不允许我添加这么多文本,而且我找不到其他方式来回复您的答案

我是.NET编程新手,正在努力学习Silverlight 2/C

我需要声明数值常量(或者更好的是只读变量),并在XAML和我的C#代码隐藏文件中访问它们

这些值在XAML中定义得更合适,但是如果需要在C#中定义,那么这比在几个地方硬编码值要好

我找到了WPF XAML的解决方案,但Silverlight显然不支持语法(我找到的解决方案要求定义在C#文件中)

蒂亚

回复Michael

我将此回复作为对我原始问题的评论添加,因为评论编辑器不允许我添加这么多文本,而且我找不到其他方式来回复您的答案

谢谢你的回答,迈克尔,但我似乎无法让它发挥作用

我从“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行第30列没有什么有趣的内容,但在App.xaml文件中,该位置包含紧靠整数值8之前的结束“>”:

  <sys:Int32 x:Key="QAPS">8</sys:Int32>
8
但是,如果我按F5,应用程序在浏览器中运行良好

我正在运行VS2008SP1和2009年3月的Silverlight工具包

我不明白App.xaml应用程序资源部分中的QAPS声明为什么会导致此问题,特别是考虑到我在应用程序中的任何地方都没有引用它。你知道会发生什么事吗

又是对Michael的回复

您是对的,我没有将xmlns:sys声明添加到我的Page.xaml中,但是添加它没有任何区别–我仍然在Page.xaml中遇到“undeclared prefix[Line:6 Position:30]”错误(并且应用程序仍然运行)。既然一切正常,我想这一定是VS2008中的一个问题

更大的问题是,当我试图从C#访问QAP时,我遇到了一个运行时异常,我已经找到了导致该异常的错误原因。问题是我显然是在资源存在之前访问它的

我声明/初始化了一个私有变量,以在类级别保存资源值;当我将初始化移到事件处理程序时,问题就消失了。所以我猜C#类级别的变量是在创建XAML资源之前计算的


(顺便说一句,评论限制在600个字符是一件非常痛苦的事情。事实上,我必须编辑我的原始问题才能发布回复)。

将它们放在你的应用程序或页面资源中:

<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>
通过像这样的Xaml

<TextBlock Text="{StaticResource QPS}"/>


您的页面的XAML是什么样子的。XAML。您可能忽略了page.xaml上的xmlns:sys命名空间声明。从xaml2009开始,您的资源定义将是
8
。这适用于Windows 8和Windows Phone 8.1。提到
<TextBlock Text="{StaticResource QPS}"/>