Как исправить ошибку «Указанное имя класса» WpfSample.MainWindow не соответствует фактической ошибке корневого экземпляра типа «System.Windows.Window»? - PullRequest
2 голосов
/ 08 ноября 2010

Поэтому я пытаюсь использовать пользовательский элемент управления wpf для winforms, используя:

var f = new FileStream (@"C:\sample.xaml", FileMode.Open, FileAccess.Read);
var element = XamlReader.Load(f);

f.Close();

var elementHost = new ElementHost();
elementHost.Dock = System.Windows.Forms.DockStyle.Fill;   
elementHost.Child = element;
this.Controls.Add(elementHost);

У меня нет опыта работы с WPF, поэтому я не знаю, как исправить эту ошибку.

EDIT:

Итак, это файл xaml:

<Window x:Class="WpfSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:r="http://schemas.aspitalia.com/Ricciolo/Controls" 
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>


            <XmlDataProvider x:Key="data" Source="Data.xml">
            </XmlDataProvider>

            <HierarchicalDataTemplate x:Key="dt" ItemsSource="{Binding XPath=outline}">
            </HierarchicalDataTemplate>

        </Grid.Resources>

        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <r:TreeListView ItemsSource="{Binding Source={StaticResource data},XPath=/opml/body/outline/outline}" ItemTemplate="{StaticResource dt}">
            <r:TreeListView.Columns>
                <GridViewColumn Header="Title" DisplayMemberBinding="{Binding XPath=@title}" Width="150" />
                <GridViewColumn Header="Childs" DisplayMemberBinding="{Binding XPath=@count}" Width="100" />
                <GridViewColumn Header="Url" DisplayMemberBinding="{Binding XPath=@xmlUrl}" Width="200" />
            </r:TreeListView.Columns>
        </r:TreeListView>


    </Grid>
</Window>

Я также получил это от бесплатного пользовательского элемента управления treelistview в сети и включил скомпилированный элемент управления и data.xml в решение, которое использует этот xaml.

EDIT2:

Код для MainWindow.xaml:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow ( )
        {
            InitializeComponent ( );
        }
    }
}

1 Ответ

0 голосов
/ 09 ноября 2010

OK.Я думаю, что проблема заключается в том факте, что вы загружаете из файла, но класс Window, который его поддерживает (т. Е. Код объекта), не вводится вместе с ним.

Вы должны либо определитьэлемент управления WPF (не уверен, следует ли использовать окно WPF - может быть, попробовать UserControl instread?) в той же сборке, что и приложение WinForms, или просто добавьте ссылку на сборку, содержащую WPC UserControl, и подключите его таким образом.

В любом случае, вы должны просто сказать:

elementHost.Child = new WpfSample.MainWindow();
this.Controls.Add(elementHost);

Надеюсь, это вас сблизит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...