c# - 如何在其他类的方法中从类外部访问变量?

时间:2014-11-22 04:22:35

标签: c# wpf xaml windows-phone-8 windows-phone

我是c#编程的初学者,在阅读一些教程后我正在开发windows phone应用程序。

我的想法是,当用户点击Windows页面中的按钮时,其他Windows手机页面中的其他按钮必须将颜色从红色更改为绿色。

如果我太基本了,请原谅我。

我在名为" IndexPage.xaml"

的页面中定义了这个
        <Button x:Name="One_green"
            Content="1"             
            Background="Green"
            Click="One_Click"
         />

        <Button x:Name="One_red"
            Content="1"             
            Background="Red"
            Click="One_Click"                       
         />

现在我在窗口看到红色按钮,因为绿色按钮隐藏在后面。

现在,以下代码来自另一个Windows手机页&#34; 1.xaml&#34;

        <Button Content="GO" Click="Button_Click"/>

现在,当用户点击&#34; GO&#34;按钮我希望按钮在&#34; IndexPage.xaml&#34;中更改为红色到绿色。所以我在&#34; 1.xaml.cs&#34;

中尝试了类似的代码
        private void Button_Click(object sender, RoutedEventArgs e)
        {  
        One_red.Visibility = Visibility.Collapsed;
        One_green.Visibility = Visibility.Visible;
        }

但是我无法访问&#34; One_red&#34;或者&#34; One_green&#34;上面代码中的按钮。请告诉我方向。

此外,我希望该代码只执行一次。 (即)当IndexPage.xaml再次加载时,我希望该按钮始终为绿色。

非常感谢你。

请告诉我是否需要其他一些细节。

3 个答案:

答案 0 :(得分:1)

您可以在&#34; Index.xaml&#34;中定义公共或内部静态变量。指定加载时将显示哪个按钮的类,直到另行指定。该变量可以在类外部访问,甚至可以在项目外部访问,具体取决于所选的修饰符。 &#34; Index.xaml&#34;的构造函数class可以有代码将其重置为默认值,以确保它只发生在页面的 next 创建上。如果您不是每次都创建新页面,则必须将默认重置器放在要将其置于前台时调用的方法中。

答案 1 :(得分:1)

在我看来,你正在努力学习,而不是遵循并实施一个规范。

正因为如此,并且因为你在2014年开始使用C#(差不多2015年), 通过MVC(MVx)直接跳转到命令式MVVM(MVVx)上的数据绑定声明将非常有用。

XAML是围绕这种模式设计的。它是XAML中自然的做事方式,完美契合,是学习模式的完美平台。

它需要大量的学习,思考和重新学习,但它会让你睁开眼睛看现代编程技巧。

那就是说...有太多方法可以满足你的要求,虽然没有一个是完全错误的,但目前有两种趋势:.Net / C#/ MsTech IMO并不浪费你的时间: / p>

功能反应式编程 OOP / MVVx (x代表什么)。

示例包括ReactiveUI,Reactive Extensions,PRISM,Caliburn.Micro等等。它们可以组合在一起,就像将传统的事件驱动/事件回调与MVVM和/或反应式编程相结合一样。但是,我会建议不要这样做。

我将以最有记录的方式开始。

看看Data binding for Windows Phone 8。这是我用谷歌搜索的第一个结果&#34; windows phone 8 xaml data binding,&#34;并处理颜色和控件。

如果您按照该示例并将资源添加到您的应用程序,那么您就完成了。

当然,你仍然可以使用event =&gt; onClick +静态类来保存View实例之间的值,但如果我假设你正在尝试学习,我就不会去那条路。

抱歉,如果我漂流了。 :)

答案 2 :(得分:0)

您可能无法访问按钮单击事件,因为它是私有的,您可能需要使其受保护或公开,默认访问说明符也可能正常。

public void Button_Click(object sender, RoutedEventArgs e)

或默认为:

void Button_Click(object sender, RoutedEventArgs e)