将事件处理程序添加到资源字典的问题

时间:2017-06-23 16:16:51

标签: c# wpf xaml

我想要的只是在资源字典中定义的按钮样式中添加事件处理程序。

ResDict.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:MyProject"
                x:Class="MyProject.ResDict" >

    //other stuff here

    <Style TargetType="Button">
        <EventSetter Event="Click" Handler="close_event" />
    </Style>
</ResourceDictionary>

ResDict.xaml.cs(&lt; =我手动添加了这个文件)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace MyProject
{
    public partial class ResDict : ResourceDictionary
    {
        public ResDict()
        {
            //InitializeComponent(); <-- If I uncomment this, the compiler cannot find it
        }
        private void close_event(object sender, RoutedEventArgs e)
        {
            //This is what the event handler is intended to be, but the compiler seems to not know it.
            //'ResDict' does not contain a definition for 'close_event' and no extension method 'close_event' accepting a first argument of type 'ResDict' could be found (are you missing a using directive or an assembly reference?)

        }
    }
}

编译器找不到事件处理程序。我发现在obj / Debug文件夹中有两个文件(ResDict.g.cs和ResDict.gics),它们包含public partial class ResDict,但由于它们不包含在项目中,编译器会想到那些类和我的(ResDict)作为单独的类,我认为这就是为什么找不到InitializeComponent(它在那些文件中定义)的原因。但是我不想包含这些文件,因为它带来了大量的编译时错误。我也不想向它们添加事件处理程序 因为它们是自动生成的文件。

我的问题: 如何/在哪里可以添加事件处理程序?那么InitializeComponent呢?如何告诉编译器它是在某些自动生成文件中定义的?

如果问题不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

几个小时后,我意识到实际问题是命名空间名称中的一个偷偷摸摸的错误(w而不是W)。那当然是无法生产的。