23

我在名为“MyTemplate.xaml”的 XAML 文件中定义了一个模板。此模板使用名为“MyTemplate.cs”的代码隐藏文件。

我的模板.xaml

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

我的模板.cs

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

在 Visual Studio 解决方案资源管理器中,这两个文件并排放置。我想做的是将这两个文件放在一起,就像使用控件及其代码隐藏一样。

我有的:在此处输入图像描述

我想拥有的:在此处输入图像描述

最好的方法是什么?谢谢你。

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

这不是您最初问题的答案,而是:

在这种情况下,请解释如何在不使用代码隐藏的情况下将事件处理程序添加到模板

您可以使用 ViewModel 和 ICommand 类来执行此操作。

首先,您需要创建 ViewModel 类,使用无参数构造函数将其设为公开且非静态。

然后创建另一个实现 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; }
    }
}

在 App.xaml 文件中将 ViewModel 添加为静态资源:

<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 回答
2

另一种方法是:

  • 添加/创建新的 XAML 文件/项目
  • 将旧的 .xaml 和 xaml.cs 内容复制并粘贴到新的等效文件中
  • 删除单独的文件
  • 重命名新文件
于 2016-04-14T19:38:57.383 回答