23

「MyTemplate.xaml」という名前の XAML ファイルで定義されたテンプレートがあります。このテンプレートは、'MyTemplate.cs' という名前のコード ビハインド ファイルを使用しています。

Mytemplate.xaml :

<ResourceDictionary x:Class="Project.Templates.MyTemplate">
    <DataTemplate ... />
</ResourceDictionary>

MyTemplate.cs :

namespace Project.Templates
{
    public partial class MyTemplate : ResourceDictionary
    {
        ...
    }
}

Visual Studio のソリューション エクスプローラーでは、これら 2 つのファイルが並んで表示されます。私がやりたいことは、コントロールとそのコード ビハインドと同じように、これら 2 つのファイルをまとめることです。

私が持っているもの:ここに画像の説明を入力

私がしたいこと:ここに画像の説明を入力

それを行う最善の方法は何ですか?ありがとうございました。

4

3 に答える 3

41

.csproj ファイルを編集する必要があります。<Compile>MyTemplate.csの要素を見つけて、その<DependentUpon>下に要素を追加します。

<Compile Include="MyTemplate.cs">
  <DependentUpon>MyTemplate.xaml</DependentUpon>
</Compile>

このブログ投稿を参照してください:プロジェクト アイテムを別の子アイテムにする

于 2013-08-08T09:31:08.673 に答える
2

別の方法は次のとおりです。

  • 新しい XAML ファイル/アイテムを追加/作成する
  • 古い .xaml および xaml.cs コンテンツをコピーして、新しい同等のファイルに貼り付けます。
  • 個別のファイルを削除します
  • 新しいファイルの名前を変更する
于 2016-04-14T19:38:57.383 に答える
2

これはあなたの最初の質問に対する答えではありませんが、これに対する答えです:

その場合、コード ビハインドを使用せずにテンプレートにイベント ハンドラーを追加する方法を説明してください。

これは、ViewModel と ICommand クラスを使用して行うことができます。

まず、ViewModel クラスを作成する必要があります。これを public にし、パラメーターのないコンストラクターで非静的にします。

次に、ICommand インターフェイスを実装する別のクラスを作成します。

public class Command : ICommand
{
    public void Execute(object parameter)
    {
        //this is what happens when you respond to the event
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;
}

コマンド クラスのインスタンスを ViewModel クラスに追加し、これを非公開にして、読み取り専用プロパティを介して公開します。

public class ViewModel
{
    private readonly ICommand _command = new Command();

    public ICommand Command
    {
        get { return _command; }
    }
}

ViewModel を静的リソースとして App.xaml ファイルに追加します。

<Application.Resources>
     <wpfApplication1:ViewModel x:Key="ViewModel"/>
</Application.Resources>

XAML ファイルの DataContext を ViewModel に設定します。

<Window DataContext="{StaticResource ViewModel}">

Command クラスにバインドして、イベントに応答します。

<Button Click="{Binding Command}"></Button>

ブーム、コード ビハインドなし。お役に立てれば。

于 2013-08-08T09:32:39.937 に答える