@iRumba

Почему не работает шаблон?

есть шаблон в resourcedictionary
<Style TargetType="controls:NeoWindow">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="controls:NeoWindow">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="auto"/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <Menu Name="mainMenu" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Top">
                            <MenuItem Header="sadf"/>

                        </Menu>
                        <TabControl Name="tabList" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

                        </TabControl>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


есть окно
<controls:NeoWindow x:Class="WpfApplication4.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300"
        xmlns:controls="clr-namespace:WpfApplication4" Loaded="NeoWindow_Loaded">
    <controls:NeoWindow.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/WpfApplication4;component/Dictionary1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </controls:NeoWindow.Resources>
</controls:NeoWindow>

Проблема в том, что в дизайнере шаблон отображается нормально, а вот при запуске окно пустое.
А при попытке кодом добавить элемент меню
((Menu)this.Template.FindName("mainMenu", this)).Items.Add(new MenuItem() { Header = "qwe" });

в консоль выводится сообщение
Первый этап обработки исключения типа "System.NullReferenceException" в WpfApplication4.exe


Странно, что если шаблон отсоединить, то такое исключение выводится не в консоль, а завершает приложение с ошибкой.
  • Вопрос задан
  • 449 просмотров
Решения вопроса 1
artem_b89
@artem_b89
Сетевой бездельник
Потому, что в TargetType нужно указывать тип.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AxisPod
@AxisPod
Ну так найдите где у вас null возвращается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы