情况:有ResourceDictionary Class1.xaml由使用x:class的class Class1.cs后面的代码支持。类Class1.cs.内有属性MyHeight
目标:访问XAML中的属性MyHeight。
问题:它没有编译,给出下一个错误:
引发异常:"系统。Windows。加成PresentationFramework.dll中的XamlParseException附加信息:"为"系统提供价值。Windows。StaticResourceExtension"引发异常。"行号"13"和行位置"41">
解决方法:它在C#代码中工作。
注意:它适用于单独的Class或UserControl,但我需要它用于ResourceDictionary。
问题:如何在MainWindow.xaml中访问Class1.cs的属性MyHeight?
类别1.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
x:Class="WpfApplication2.Class1">
Class1.cs:
partial class Class1
{
public Class1()
{
InitializeComponent();
}
public double MyHeight
{
get { return 20; }
set { }
}
}
主窗口.xaml:
<Window.Resources>
<local:Class1 x:Key="MyClass"></local:Class1>
</Window.Resources>
<Grid>
<Ellipse Fill="Red" Width="100" Height="{Binding Source={StaticResource MyClass}, Path=MyHeight}"></Ellipse>
</Grid>
主窗口.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
this.Resources.Add("key", new Class1());
MessageBox.Show(((Class1)this.Resources["key"]).MyHeight.ToString()); // Works
InitializeComponent();
}
}
<Window.Resources>
<ResourceDictionary>
<local:Class1 x:Key="MyClass" />
</ResourceDictionary>
</Window.Resources>
缺少的是ResourceDictionary
标记。
这也起作用(作为上述的替代品):
public Class1()
{
InitializeComponent();
Add("MyHeight", 20d);
}
InitializeComponent
重置了Resources
字典,它解释了你的"这在代码中有效"——如果你在之后尝试检索"密钥",你就不会得到它。