WPF 中的静态资源

Posted

技术标签:

【中文标题】WPF 中的静态资源【英文标题】:Static Resources in WPF 【发布时间】:2013-10-23 02:21:51 【问题描述】:

我在 WPF 中有一个在 XAML 中作为视图控件引用的类:

<ctrl:MyController x:Key="Controller"/>

我现在可以将其作为静态资源访问,一切都很好:

Command="Binding Source=StaticResource Controller, Path=HistoryFutureRetrieveLeft,
Mode=OneTime">

但是我现在需要使用 IOC 容器创建控制器。我可以用以下代码做到这一点:

Resources.Add("Controller", App.IocContainer.Resolve<MyController>());

但我必须从 XAML 中删除该行:

<ctrl:MyController x:Key="Controller"/>

这在运行时不是问题,但在尝试编辑 XAML 时确实会导致问题,因为所有绑定现在都显示“找不到资源控制器”。有没有什么办法可以让 IOC 容器在运行时创建控制器,但在 XAML 文件中为 VS 设计器定义控制器?

【问题讨论】:

在设计器中工作时将Controller 声明保留在 XAML 中,并在运行时将其注释掉? 【参考方案1】:

您可以在 XAML 中保留静态定义的控制器以满足设计者的需求,并在运行时将其替换为来自容器的适当控制器。

更新: 你能用DataContext代替修改资源吗?

this.DataContext = App.IocContainer.Resolve<MyController>()

然后您可以在 XAML (d:DataContext) 中指定数据上下文类型,以使设计者满意并具有智能感知。

【讨论】:

如果我尝试这样做,它会抱怨控制器没有公共无参数构造函数。

以上是关于WPF 中的静态资源的主要内容,如果未能解决你的问题,请参考以下文章

从外部文件或程序集加载 WPF 样式或其他静态资源

[WPF]静态资源(StaticResource)和动态资源(DynamicResource)

[WPF]静态资源(StaticResource)和动态资源(DynamicResource)

wpf中静态资源和动态资源的区别

WPF基础篇----静态资源和动态资源

WPF 精修篇 静态资源