2009-07-21 107 views
12

我在c#中用3个不同的窗口创建了一个WPF应用程序,其中有Home.xaml, Name.xaml, Config.xam l。我想在Home.xaml.cs中声明一个变量,我可以在其他形式中使用它。我试着做public string wt = "";,但没有奏效。使用全局变量的WPF应用程序

如何让所有三种形式都可以使用?

回答

11

您可以使用一个静态属性:

public static class ConfigClass() 
{ 
    public static int MyProperty { get; set; } 
} 

编辑:

这里的想法是创建一个你认为所有的“通用数据”一类,通常配置。当然,你可以使用任何类,但建议你使用静态类。 你可以像这样访问这个属性:

Console.Write(ConfigClass.MyProperty) 
+0

我不知道我的理解......你能解释一下吧。谢谢。 – Jake 2009-07-21 20:10:09

1

有两种不同的东西,你可以在这里做(除其他外,这些只是浮现在脑海中第一个两个)。

  1. 您可以使静态变量上Home.xaml.cs

    公共静态字符串美孚= “”;

  2. 您可以将变量传递给所有三种形式。

我会去与#2,我自己,如果有必要创建一个包含我所需要的数据单独的类。然后每个班级都可以访问数据。

+0

但我想给家中的变量添加一个值,并在config中使用该值。如果我用所有的形式声明价值被清除。我如何声明它,以便我可以以三种形式连续使用它。 – Jake 2009-07-21 20:19:25

18

正确的方法,特别是如果你想要移动到XBAPP,是将其存储在

Application.Current.Properties 

这是一个字典对象。

+0

属性不是作为Application.Current的成员提出的,有没有什么特殊的事情可以访问它? 编辑:它刚刚发生在我身上,这可能是因为我正在制作Windows Phone应用程序,所以我可能会有稍微不同的库。 – 2011-03-21 21:34:08

+2

@dr monk:Win Phone(7)表示SilverLight,这个答案是关于WPF的。 – 2011-03-21 22:18:23

10

为了避免以绕过窗口和用户控件,或创建一个静态类之间的值复制中WPF现有的功能,你可以使用:

  • 设置:App.Current.Properties["NameOfProperty"] = 5;
  • 越来越:string myProperty = App.Current.Properties["NameOfProperty"];

这是上面提到的,但语法有点不合适。

这提供了应用程序中的全局变量,可以从任何运行在其中的代码访问。

0

的App.xaml:

<Application x:Class="WpfTutorialSamples.App" 
     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" 
     StartupUri="WPF application/ResourcesFromCodeBehindSample.xaml"> 
<Application.Resources> 
    <sys:String x:Key="strApp">Hello, Application world!</sys:String> 
</Application.Resources> 

代码背后

Application.Current.FindResource("strApp").ToString()