【发布时间】:2010-10-13 13:28:03
【问题描述】:
我正在尝试创建一个 WPF 自定义控件,其中包含对已在 BootStrapper 中创建的统一容器的引用 - 例如
原因是我希望自定义控件能够解析统一容器,以便能够使用已注册到容器的一些服务。例如用户偏好服务/权利服务。
到目前为止,我已经创建了我的自定义控件,并在代码隐藏文件中包含了以下依赖属性
public static readonly DependencyProperty ContainerProperty = DependencyProperty.Register("Container", typeof(UnityContainer), typeof(SomeCustomWPFControl), new PropertyMetadata("DefaultTestValue"));
public UnityContainer Container
{
get { return (UnityContainer)GetValue(ContainerProperty); }
set { SetValue(ContainerProperty, value); }
}
在我尝试包含自定义控件的 WPF 表单中,我已将以下行添加到资源区域:
<Unity:UnityContainer x:Key="unitContainer"></Unity:UnityContainer>
我尝试以它自己的形式创建自定义控件:
<Globe:SomeCustomWPFControl Container="{DynamicResource unitContainer}" DockPanel.Dock="Right" x:Name="JimEditor1" Grid.Column="0" Grid.Row="3"></Globe:SomeCustomWPFControl>
我在运行时收到的唯一错误信息是
标记文件“[程序集名称];[路径/文件].xaml”第 135 行位置 22 中的对象“System.Windows.Controls.Grid”出错。
关于我哪里出错了有什么建议吗?谢谢。
完整的 Xaml:
<UserControl x:Class="DB.GPF.Globe.Views.JimTestPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Globe="clr-namespace:DB.GPF.Globe"
xmlns:Unity="clr-namespace:Microsoft.Practices.Unity;assembly=Microsoft.Practices.Unity">
<UserControl.Resources>
<Unity:UnityContainer x:Key="unitContainer"></Unity:UnityContainer>
</UserControl.Resources>
<Grid>
<Globe:SomeCustomWPFControl Container="{DynamicResource unitContainer}" x:Name="JImTestControl1"></Globe:SomeCustomWPFControl>
</Grid>
更新:如果类型更改为内置 .Net 类型,则问题似乎是 UnityContainer 或 IUnityContainer 类型的 DependencyProperty,例如字符串然后它运行正常。任何想法为什么我们不能拥有 UnityContainer 或 IUnityContainer 类型的 DependencyProperty?
【问题讨论】:
-
你能发布你的 Xaml 的其余部分吗?
-
这是完整的 Xaml:
标签: c# wpf unity-container