如何从代码后面访问静态变量?

时间:2013-12-19 14:10:49

标签: c# wpf

问题:是否可以从XAML中使用的代码中访问静态变量?

原因:我想要一个单独的字符串变量来保存一个菜单名称,该名称将在不同的地方使用(代码隐藏在XAML中)。

示例(代码隐藏):

public partial class MainWindow : Window
{
    public static readonly string menuName = "MyMenu";

    ... other code ...
}

示例(XAML):

<MenuItem Header="... here I want my menuName to appear ..." />

3 个答案:

答案 0 :(得分:3)

为此您需要在xaml中实例化一次类,然后您可以使用静态成员。

最好为静态变量创建一个单独的类,并在资源中将其加载到xaml中。

类似这样的事情

<Window.Resources>
        <!-- Create an instance of the  class called MyClass -->

        <my:MyClass x:Key="MyClass" />

</Window.Resources>

然后将其用作

之类的东西
<TextBox Text="{x:Static my:MyClass.MyProperty}" Width="500" Height="100" /> 

<TextBlock Text="{Binding Source={StaticResource MyClass},Path=MyProperty}" />

也看到了 XAML Binding to static classes

How to bind in XAML to a static property?

答案 1 :(得分:0)

你不能这样做的原因很简单,当你绑定你的属性时,你将获得对MainWindow的无限嵌套调用,它将生成'System.StackOverflowException'你应该使用像这样的容器类

    namespace WpfApplication2
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {

            public MainWindow()
            {
                InitializeComponent();
                this.DataContext = this; 
            }


        }
        public  class  WindowMessagesManager
        {
            private static string _header;
            public static string Header1
            {
                get { return "My Header"; }
                set { _header = value; }
            }

        }

}
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prop="clr-namespace:WpfApplication2"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <prop:WindowMessagesManager x:Key="window" ></prop:WindowMessagesManager>
        //you can  try to uncomment this and you will get an exception 
        <!--<prop:MainWindow x:Key="window"></prop:MainWindow>-->
    </Window.Resources>
    <Grid>
        <Menu>
        <MenuItem  Height="100" Width="100" Header="{Binding  Source={StaticResource ResourceKey=window}, Path=Header1}"></MenuItem>
        </Menu>
    </Grid>
</Window>

答案 2 :(得分:0)

您应该将其添加到项目Resource dictionary

转到你的项目 - &gt;属性 - &gt;资源 - &GT;添加资源按钮

然后你就可以在Xaml中使用它,或者像这样使用代码:

- XAML ---

  <MenuItem Header="{x:Static properties:Resources.menuName}" /> 

---代码背后----

Properties.Resources.menuName