Это подробно объясняется здесь: WPF в Visual Studio 2010 - Часть 4. Прямой хостинг содержимого WPF
Итак, если вы используете стандартный образец Extensibility / Custom Editor, который поставляетсяс помощью Visual Studio SDK вы можете проверить его следующим образом:
1) Измените предоставленный файл EditorFactory.cs
следующим образом:
// Create the Document (editor)
//EditorPane NewEditor = new EditorPane(editorPackage); // comment this line
WpfEditorPane NewEditor = new WpfEditorPane(); // add this line
2) создайте, например, WpfEditorPane.cs
файл выглядит так:
[ComVisible(true)]
public class WpfEditorPane : WindowPane, IVsPersistDocData
{
private TextBox _text;
public WpfEditorPane()
: base(null)
{
_text = new TextBox(); // Note this is the standard WPF thingy, not the Winforms one
_text.Text = "hello world";
Content = _text; // use any FrameworkElement-based class here.
}
#region IVsPersistDocData Members
// NOTE: these need to be implemented properly! following is just a sample
public int Close()
{
return VSConstants.S_OK;
}
public int GetGuidEditorType(out Guid pClassID)
{
pClassID = Guid.Empty;
return VSConstants.S_OK;
}
public int IsDocDataDirty(out int pfDirty)
{
pfDirty = 0;
return VSConstants.S_OK;
}
public int IsDocDataReloadable(out int pfReloadable)
{
pfReloadable = 0;
return VSConstants.S_OK;
}
public int LoadDocData(string pszMkDocument)
{
return VSConstants.S_OK;
}
public int OnRegisterDocData(uint docCookie, IVsHierarchy pHierNew, uint itemidNew)
{
return VSConstants.S_OK;
}
public int ReloadDocData(uint grfFlags)
{
return VSConstants.S_OK;
}
public int RenameDocData(uint grfAttribs, IVsHierarchy pHierNew, uint itemidNew, string pszMkDocumentNew)
{
return VSConstants.S_OK;
}
public int SaveDocData(VSSAVEFLAGS dwSave, out string pbstrMkDocumentNew, out int pfSaveCanceled)
{
pbstrMkDocumentNew = null;
pfSaveCanceled = 0;
return VSConstants.S_OK;
}
public int SetUntitledDocPath(string pszDocDataPath)
{
return VSConstants.S_OK;
}
#endregion
}
Конечно, вам придется реализовать всю логику редактора (добавить интерфейсы и т. Д.), Чтобы имитировать то, что сделано в образце Winforms, поскольку то, что я здесь предоставляю, действительноминимальный материал для демонстрационных целей.
ПРИМЕЧАНИЕ: вся эта «контентная» вещь работает только начиная с Visual Studio 2010 (поэтому вам нужно убедиться, что ваш проект ссылается на сборки Visual Studio 2010, что должно быть в том случае, есливы начинаете проект с нуля, используя Visual Studio 2010).Размещение редакторов WPF в Visual Studio 2008 возможно с использованием System.Windows.Forms.Integration.ElementHost .