0

在我的应用程序中,我试图通过代码加载主模块。一切都可以渲染,我不知道为什么它不渲染。内容具有正确的价值和一切。我的猜测是有些东西摇摇晃晃,我似乎错过了它。

持有视图的控件

[ContentPropertyAttribute("ContentView")]
public class ContentControlExtened : ContentControl
{
    public static readonly DependencyProperty ContentProperty =
        DependencyProperty.Register(
            "Type",
            typeof(Type),
            typeof(ContentControl),
            new FrameworkPropertyMetadata(null, ContentTypeChanged));

    public static readonly DependencyProperty ContentViewProperty =
         DependencyProperty.Register(
             "View",
             typeof(FrameworkElement),
             typeof(ContentControl),
             new FrameworkPropertyMetadata(null, ContentViewChanged));

    private static void ContentViewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        //throw new NotImplementedException();
    }

    public ContentControlExtened()
    {
        this.Loaded += ContentControlLoaded;
    }

    private void ContentControlLoaded(object sender, RoutedEventArgs e)
    {
        this.LoadContent();
    }

    private void LoadContent()
    {
        UserControl u = null;

        if (Type != null)
        {
            u = (UserControl)ServiceLocator.Current.GetInstance(this.Type);
        }
        u.Background = new SolidColorBrush(Color.FromRgb(0, 0, 255));
        this.View = u;
    }

    public Type Type
    {
        get { return (Type)GetValue(ContentProperty); }
        set { SetValue(ContentProperty, value); }
    }

    public FrameworkElement View
    {
        get { return (FrameworkElement)GetValue(ContentProperty); }
        set
        {
            SetValue(ContentProperty, value);
        }
    }
    }

在 shell 中加载给定 moduleInfo 主视图的方法

        private void OpenMainView(ModuleInfo module)
    {
        Type moduleType = Type.GetType(module.ModuleType);
        var moduleMainViewType = moduleType.Assembly.GetType(moduleType.Namespace + ".Views.MainView");
        this.ContentHolder.MainContent.Type = moduleMainViewType;
    }

主视图的构造器是直截了当的。通过 servicelocator 设置标准控件 InitializeComponent() 和 Datacontext。

4

1 回答 1

0
public FrameworkElement View
{
    get { return (FrameworkElement)GetValue(ContentProperty); }
    set
    {
        SetValue(ContentProperty, value);
    }
}

在这里,您正在获取和设置ContentProperty. 应该是ContentViewProperty

于 2013-08-04T10:11:13.947 回答