Я создал мастер проекта для своего шаблона. С помощью этого мастера пользователь может ввести несколько параметров, например имя приложения, а затем создать приложение. Проблема в том, что мастер запускается, но проект создается сразу, а не после завершения работы мастера. Это означает, что замены не происходит.
У меня есть эта форма (сильно упрощенная):
<Window x:Class="PartyTemplateWizard.Form"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="340" d:DesignWidth="750">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="Name" Grid.Column="0" />
<TextBox x:Name="Name" Grid.Column="1" Text="{Binding Path=dummyproperty, FallbackValue='Naam'}" />
<Button Content="Ok" Grid.Column="1" Grid.Row="1" />
</Grid>
</Window>
С волшебником:
public class Wizard : IWizard
{
private readonly Form _form = new Form();
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
try
{
_form.Show();
string name = _form.Name.Text;
if (!string.IsNullOrEmpty(name)) replacementsDictionary.Add("$appname$", name);
}
catch (Exception e)
{
}
}
public bool ShouldAddProjectItem(string filePath)
{
return true;
}
public void RunFinished()
{
}
public void BeforeOpeningFile(ProjectItem projectItem)
{
}
public void ProjectItemFinishedGenerating(ProjectItem projectItem)
{
}
public void ProjectFinishedGenerating(Project project)
{
}
}
И я привязал это к своему шаблону с помощью этого фрагмента кода:
<WizardExtension>
<Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=6c4fd97fa2ac3b4f</Assembly>
<FullClassName>PartyTemplateWizard.Wizard</FullClassName>
</WizardExtension>
Полный код доступен на github: https://github.com/Avalaxy/PartyTemplateWizard
Кто-нибудь знает, почему проект создается до успешного завершения работы мастера (хотя это невозможно, поскольку на кнопке «ОК» еще нет обработчика событий)?