В данный момент разбираюсь с VSIP и у меня есть вопрос:
Как сделать Editor (или Designer) который:
— не будет ассоциироваться с файлом, т.е. не будет в New -> File его типа данных
— будет содержать контролы типа TextBox, ComboBox
— а при выборе хранимого объекта выводил заполнял значения этих полей (в моем случае это Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem)
— при выборе File -> Save — вызывал мою функцию сохранения
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, rollinx, Вы писали:
AVK>>>В направлении VS SDK разумеется.
R>>Ну это понятно, а вот там где что посмотреть?
AVK>Раздел создания собственных редакторов, разумеется.
Немного уже разобрался, сделал Package на базе примера SynchronousXmlDesigner из SDK.
При открытии через File -> New
вижу что вызывается EditorFactory.SetSite -> EditorFactory.MapLogicalView -> EditorFactory.CreateEditorInstance -> Editor.Exec.
Но как это всё проделать вручную по нажатию какой-то кнопки?
Здравствуйте, AndrewVK, Вы писали:
R>>Как сделать Editor (или Designer) который: R>>- не будет ассоциироваться с файлом AVK>В стандартных типах проектов — никак.
Либо я не понял задачи, либо это просто Editors\{FactoryGuid}\OpenWithEntries
Атрибут регисрации выглядит как-то так:
[AttributeUsage(AttributeTargets.Class, AllowMultiple=true, Inherited=true)]
public class RegisterOpenWithEntryAttribute : RegistrationAttribute
{
Guid _factory;
Guid _viewID;
string _title;
public RegisterOpenWithEntryAttribute(object factoryType, string viewID, string title)
{
if (factoryType is string)
_factory = new Guid((string)factoryType);
else if (factoryType is Type)
_factory = ((Type)factoryType).GUID;
else if (factoryType is Guid)
_factory = (Guid)factoryType;
_viewID = new Guid(viewID);
_title = title;
}
public Guid Factory
{
get { return _factory; }
}
public Guid ViewID
{
get { return _viewID; }
}
public string Title
{
get { return _title; }
}
private string OpenWithPath
{
get { return string.Format("Editors\\{0}\\OpenWithEntries", _factory.ToString("B")); }
}
public override void Register(RegistrationContext context)
{
context.Log.WriteLine(string.Format("Open with: {0} as '{1}'", _viewID, _title));
Key childKey = context.CreateKey( OpenWithPath );
childKey.SetValue(_viewID.ToString("B"), _title);
childKey.Close();
}
public override void Unregister(RegistrationContext context)
{
context.RemoveValue(OpenWithPath, _viewID.ToString("B"));
}
}
Ну и там вся стандартная припрыжка с IVsEditorFactory, RegisterEditorExtension, RegisterEditorLogicalView