WPF - ControlTemplate上的事件?

Rac*_*hel 9 wpf controltemplate routed-events

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

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

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

   </StackPanel>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

我使用的是MVVM设计模式,此处的控件位于ResourceDictionary中,该ResourceDictionary被添加到应用程序的MergedDictionaries中.

Tho*_*que 11

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

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

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

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

       </StackPanel>
    </ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

C#代码:

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

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