1

ビュー モデルのファイルが添付された WPF ウィンドウを作成する Visual Studio アイテム テンプレートを作成しようとしています。

次のように

VMWindow.xaml ---VMWindow.xaml.cs ---VMWindow.vm.cs

次の .vstemplate ファイルを使用してテンプレートを作成できます

<VSTemplate Type="Item" Version="2.0.0"
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>Viewmodel Dialog Box</Name>
    <Description>Viewmodel Dialog Box</Description>
    <Icon>Icon.ico</Icon>
    <ProjectType>CSharp</ProjectType>
    <DefaultName>VMDialog</DefaultName>
  </TemplateData>
  <TemplateContent>
    <ProjectItem TargetFileName="$fileinputname$.xaml" SubType="Window">ViewModelDialogTemplate.xaml</ProjectItem>
    <ProjectItem TargetFileName="$fileinputname$.xaml.cs">ViewModelDialogTemplate.xaml.cs</ProjectItem>
    <ProjectItem TargetFileName="$fileinputname$.vm.cs">ViewModelDialogTemplate.vm.cs</ProjectItem>
  </TemplateContent>
</VSTemplate>

ソリューション エクスプローラーに表示されるときに、メイン ウィンドウ ファイル内にネストされた .vm.cs ファイルを使用してテンプレートを作成したいと考えています。

次のハウツーを見つけましたが、Visual Studio 2010 でそれに従うのに問題があります。これは2008年に書かれたものですが、これはまだ適用されますか?

コード プロジェクトの記事

4

4 に答える 4

6

それは実際には非常に簡単です...

 <ProjectItem TargetFileName="$fileinputname$.xaml" SubType="Window">ViewModelDialogTemplate.xaml</ProjectItem>
    <ProjectItem TargetFileName="$fileinputname$.xaml/$fileinputname$.xaml.cs">ViewModelDialogTemplate.xaml.cs</ProjectItem>
    <ProjectItem TargetFileName="$fileinputname$.xaml/$fileinputname$.vm.cs">ViewModelDialogTemplate.vm.cs</ProjectItem>
于 2014-04-09T17:41:56.427 に答える
2

もっと簡単な方法があります。VS が複合アイテムの作成に使用するのと同じウィザードを利用できます。これを行うには、テンプレートの末尾の <TemplateContent>... の後に要素を追加します。

<WizardExtension>
    <Assembly>Microsoft.VisualStudio.Web.Application, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
    <FullClassName>Microsoft.VisualStudio.Web.Application.WATemplateWizard</FullClassName>
</WizardExtension>

次に、親の拡張子と子の拡張子をウィザードに伝える必要があります...

<CustomParameters>
  <CustomParameter Name="$ParentExtension$" Value=".xaml"/>
  <CustomParameter Name="$ChildExtension$" Value=".cs"/>
</CustomParameters>

この要素は <TemplateContent> 内に入ります。

このソリューションは VS2012 でテストされ、機能しており、ウィザードの呼び出しでハードコーディングされたバージョンを確認できます。バージョンに問題がある場合は、ファイル webform.vstemplate (ビジュアル スタジオの .aspx テンプレート) を探して、自分自身を鼓舞してください。

于 2016-01-25T11:17:56.457 に答える
0

同じ方法が VS 2010 でも機能することが判明しました。少し調整が必要でしたが、このコード プロジェクトの記事では基本的な考え方について説明しています。

于 2012-10-16T12:53:43.810 に答える
0

Microsoft.VisualStudio.TemplateWizard.IWizard インターフェイスを実装し、新しい項目をプロジェクトから削除して別の項目の子として再度追加するコードを少し記述する必要があります。これは、拡張子 .gen.cs を持つ任意のファイルを取得し、それを同じ名前の .sql ファイルの子にする QueryFirst の実際の例です...

    public void ProjectItemFinishedGenerating(ProjectItem
        item)
    {
        string path = item.FileNames[0];
        string parentPath = null;
        if (path.EndsWith(".gen.cs"))
            parentPath = path.Replace(".gen.cs", ".sql");
        if (path.EndsWith("Results.cs"))
            parentPath = path.Replace("Results.cs", ".sql");
        if (!string.IsNullOrEmpty(parentPath))
        {
            ProjectItem parent = item.DTE.Solution.FindProjectItem(parentPath);
            if (parent == null)
                return;
                item.Remove();
                parent.ProjectItems.AddFromFile(path);
        }


    }

コードをテンプレートに添付するには、.vstemplate ファイルに次のようなものが必要です...

<WizardExtension>
    <Assembly>QueryFirst, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4688a60b10e39f04</Assembly>
    <FullClassName>QueryFirst.WizardImplementation</FullClassName>
</WizardExtension>
于 2017-05-04T18:00:23.577 に答える