WPF - События на шаблоне ControlTemplate? - PullRequest
8 голосов
/ 23 июля 2010

Кто-нибудь знает, почему я не могу установить событие в шаблоне управления ??

Например, следующая строка кода не будет компилироваться.Он делает это с любыми событиями в шаблоне элемента управления.

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

   </StackPanel>
</ControlTemplate>

Я использую шаблон проектирования MVVM, а элемент управления находится в ResourceDictionary, который добавляется в MergedDictionaries приложения.

1 Ответ

11 голосов
/ 24 июля 2010

Кто-нибудь знает, почему я не могу установить событие в шаблоне управления ??

На самом деле, вы можете ... Но где вы ожидаете, что будет определен обработчик событий? У 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)
        {
            ...
        }
    }
}

(вам также может понадобиться изменить действие сборки словаря ресурсов на «Страница», точно не помню ...)

...