问题:是否可以从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 ..." />
答案 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}" />
答案 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