9

有谁知道为什么我不能在控件模板上设置事件?

例如,以下代码行将无法编译。它对控件模板中的任何事件执行此操作。

<ControlTemplate x:Key="DefaultTemplate" TargetType="ContentControl">
   <StackPanel Loaded="StackPanel_Loaded">

   </StackPanel>
</ControlTemplate>

我正在使用 MVVM 设计模式,这里的控件位于添加到应用程序的 MergedDictionaries 的 ResourceDictionary 中。

4

1 回答 1

12

有谁知道为什么我不能在控件模板上设置事件?

实际上,您可以...但是您希望在哪里定义事件处理程序?没有代码隐藏,因此ResourceDictionary没有地方放置事件处理程序代码。但是,您可以为资源字典创建一个类,并将其与x:Class属性相关联:

<ResourceDictionary x:Class="MyNamespace.MyClass"
                    xmlns=...>

    <ControlTemplate x:Key="DefaultTemplate" TargetType="ContentControl">
       <StackPanel Loaded="StackPanel_Loaded">

       </StackPanel>
    </ControlTemplate>

C#代码:

namespace MyNamespace
{
    public partial class MyClass : ResourceDictionary
    {
        void StackPanel_Loaded(object sender, RoutedEventArgs e)
        {
            ...
        }
    }
}

(您可能还需要将资源字典的构建操作更改为“页面”,我不记得确切...)

于 2010-07-23T21:22:32.367 回答