如何访问另一个XAML文件中ResourceDictionary的代码隐藏属性



情况:有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字典,它解释了你的"这在代码中有效"——如果你在之后尝试检索"密钥",你就不会得到它。

相关内容

  • 没有找到相关文章

最新更新