如何在C#Silverlight应用程序中使字符串值从一个区域访问到另一个区域
更新:使userIP保持静态似乎是可行的。但是,我了解到MainPage()是在应用程序启动()之前执行的,因此InitParam值不是立即可用的。我可能得把代码放在别的地方 我正在编写一个Silverlight应用程序,并在InitParams中引入一个变量,我希望该变量能够以某种方式访问代码的其他区域。我不希望立即将值赋给XAML中的元素,而是尽可能使用C。在使用数据修改XAML之前,我必须执行另一个步骤。以下是我到目前为止所做的: 在我的App.xaml.cs文件中,我向App类添加了一个字符串userIP,希望以后能够访问这个值。然后,我尝试将InitParams变量的值分配给我在上面创建的userIP字符串。这是它的样子如何在C#Silverlight应用程序中使字符串值从一个区域访问到另一个区域,c#,silverlight,xaml,C#,Silverlight,Xaml,更新:使userIP保持静态似乎是可行的。但是,我了解到MainPage()是在应用程序启动()之前执行的,因此InitParam值不是立即可用的。我可能得把代码放在别的地方 我正在编写一个Silverlight应用程序,并在InitParams中引入一个变量,我希望该变量能够以某种方式访问代码的其他区域。我不希望立即将值赋给XAML中的元素,而是尽可能使用C。在使用数据修改XAML之前,我必须执行另一个步骤。以下是我到目前为止所做的: 在我的App.xaml.cs文件中,我向App类添加了一个
namespace VideoDemo2
{
public partial class App : Application
{
public string userIP;
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
this.userIP = e.InitParams["txtUserIP"];
}
...}
我添加到代码中的唯一行是publicstringuserip
和this.userIP=e.InitParams[“txtoserip”]代码>。我想知道这是不是一个正确的方法,让这些数据在以后可用
在MainPage.xaml.cs文件中,我试图引用我先前指定的userIP值,但我不知道如何进行引用。例如,我想创建一个新字符串,然后将其设置为等于userIP:
public MainPage()
{
InitializeComponent();
string myUserIP;
myUserIP = VideoDemo2.App.userIP;
}
然后我得到一个错误:错误1非静态字段、方法或属性“VideoDemo2.App.userIP”需要对象引用
我必须处理App.xaml.cs中的InitParams
,因为参数就是在这里传递的,但是如果可能的话,我想让这些参数中的一个可以用于我的应用程序的其他部分,而不必将其放入xaml中。需要做什么才能在应用程序中“看到”值?我是C#的新手,因此非常感谢您的帮助。问题在于VideoDemo2.App不是一个实例,而是一种类型
如果你想访问userIP,你需要访问你的应用程序的实际实例
Silverlight提供了一个公开当前应用程序实例的静态属性:
App runningApp = (VideoDemo2.App)Application.Current;
string myUserIP = runningApp.userIP;
或者,您可以在应用程序中将userIP设置为静态字符串。您可以在设置“this”的位置删除它,但您可以从任何地方访问该类型
namespace VideoDemo2
{
public partial class App : Application
{
public static string userIP;
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
App.userIP = e.InitParams["txtUserIP"];
}
...}
问题在于VideoDemo2.App不是一个实例,而是一个类型
如果你想访问userIP,你需要访问你的应用程序的实际实例
Silverlight提供了一个公开当前应用程序实例的静态属性:
App runningApp = (VideoDemo2.App)Application.Current;
string myUserIP = runningApp.userIP;
或者,您可以在应用程序中将userIP设置为静态字符串。您可以在设置“this”的位置删除它,但您可以从任何地方访问该类型
namespace VideoDemo2
{
public partial class App : Application
{
public static string userIP;
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
App.userIP = e.InitParams["txtUserIP"];
}
...}
您可以在静态属性Application.Current中找到App类的实例。从SL应用程序中的任何位置尝试此操作:
((VideoDemo2.App)Application.Current).userIP;
编辑:顺便说一句,我更喜欢在单例类中保留这样的设置(这是一种在C#中实现的简单模式,快速搜索应该足够了)。对于“良好形式”,任何公共的东西都应该是属性,公共属性应该是pascal大小写。将公共字符串userIp更改为:
public string UserIP { get; set; }
你会很快赢得朋友并影响他人;)
编辑:这是一本关于Silverlight中应用程序类生命周期的好书您可以在静态属性Application.Current中找到应用程序类的实例。从SL应用程序中的任何位置尝试此操作:
((VideoDemo2.App)Application.Current).userIP;
编辑:顺便说一句,我更喜欢在单例类中保留这样的设置(这是一种在C#中实现的简单模式,快速搜索应该足够了)。对于“良好形式”,任何公共的东西都应该是属性,公共属性应该是pascal大小写。将公共字符串userIp更改为:
public string UserIP { get; set; }
你会很快赢得朋友并影响他人;)
编辑:这是一本关于Silverlight中应用程序类生命周期的好书FlySwat和James Cadd的回答都很有帮助,但我发现在Silverlight中,使用应用程序的资源字典效果最好
在ASPX或HTML页面中,在Silverlight
标记中使用以下
标记:
<param name="initParams" value="txtSomeVariable=SomeValue"/>
要在应用程序的生命周期内从字典中提取值,只需使用:
App.Current.Resources["txtSomeVariable"].ToString();
我从Tim Heuer在Silverlight.Net上的视频演示中了解了InitParams和应用程序资源字典:
此外,我还写了一篇博客文章,更详细地描述了这种情况:
我希望这些信息能帮助其他偶然发现这个问题的用户 FlySwat和James Cadd的回答都很有帮助,但我发现在Silverlight中,使用应用程序的资源字典效果最好
在ASPX或HTML页面中,在Silverlight
标记中使用以下
标记:
<param name="initParams" value="txtSomeVariable=SomeValue"/>
要在应用程序的生命周期内从字典中提取值,只需使用:
App.Current.Resources["txtSomeVariable"].ToString();
我从Tim Heuer在Silverlight.Net上的视频演示中了解了InitParams和应用程序资源字典:
此外,我还写了一篇博客文章,更详细地描述了这种情况:
我希望这些信息能帮助其他偶然发现这个问题的用户 不要这样做-将为您创建一个应用程序实例,并在整个应用程序生命周期中保留该实例。查看Application.Current静态属性。我不是说他需要实例化一个应用程序,我是说他需要使用提供的实例。但这是你在回答App runningApp=new App()时显示的。您不需要在Silverlight中构造应用程序类的实例,这已经为您完成了。他的问题实际上与Silverlight无关,这是类型和实例概念之间的一个普遍误解。我是在引导他解决更大的问题,而不是把重点放在具体的执行上。不管怎样,我已经说明了如何使用提供的silverlight静态类