如何访问另一个 XAML 文件中 ResourceDictionary 属性 后面的代码?
How to access a code behind property of ResourceDictionary in another XAML file?
情况:ResourceDictionary Class1.xaml 背后的代码支持 Class Class1.cs 使用x:Class。 属性MyHeight里面有ClassClass1.cs.
目标:在 XAML.
中访问 属性 MyHeight
问题:它没有编译给出下一个错误:
抛出异常:'System.Windows.Markup.XamlParseException' in PresentationFramework.dll
附加信息:“在 'System.Windows.StaticResourceExtension' 上提供值引发异常。”行号“13”和行位置“41”。
解决方法:它适用于 C# 代码。
注意:它适用于单独的 Class 或 UserControl,但我需要它用于 ResourceDictionary。
问题:如何访问ClassClass1.cs的属性MyHeightMainWindow.xaml?
Class1.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 { }
}
}
MainWindow.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>
MainWindow.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
字典,它解释了你的 "this works in code" -- 如果你试图在之后检索 "key",你将无法得到它。
情况:ResourceDictionary Class1.xaml 背后的代码支持 Class Class1.cs 使用x:Class。 属性MyHeight里面有ClassClass1.cs.
目标:在 XAML.
中访问 属性 MyHeight问题:它没有编译给出下一个错误:
抛出异常:'System.Windows.Markup.XamlParseException' in PresentationFramework.dll 附加信息:“在 'System.Windows.StaticResourceExtension' 上提供值引发异常。”行号“13”和行位置“41”。
解决方法:它适用于 C# 代码。
注意:它适用于单独的 Class 或 UserControl,但我需要它用于 ResourceDictionary。
问题:如何访问ClassClass1.cs的属性MyHeightMainWindow.xaml?
Class1.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 { }
}
}
MainWindow.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>
MainWindow.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
字典,它解释了你的 "this works in code" -- 如果你试图在之后检索 "key",你将无法得到它。