У меня есть настраиваемый шаблон элемента управления для моего CalendarItem
, и он отлично работает, за исключением того, что при нажатии на месяц (<Button x:Name="PART_HeaderButton">
) приложение вылетает с:
System.NullReferenceException: ' Ссылка на объект не установлена для экземпляра объекта. '
Вот большая часть сведений об ошибке.
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=PresentationFramework
StackTrace:
at System.Windows.Controls.Primitives.CalendarItem.<GetCalendarButtons>d__56.MoveNext()
at System.Windows.Controls.Primitives.CalendarItem.GetCalendarButton(DateTime date, CalendarMode mode)
at System.Windows.Controls.Primitives.CalendarItem.FocusDate(DateTime date)
at System.Windows.Controls.Primitives.CalendarItem.HeaderButton_Click(Object sender, RoutedEventArgs e)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
Я не знаю, что делать с MoveNext
или GetCalendarButton
или что-нибудь, но дело в том, что мне все равно. Мне не нужно, чтобы название месяца было интерактивным. Если исправление действительно связано с его исправлением, чтобы заставить его работать, это нормально, но меня действительно волнует, чтобы мое приложение не взламывало sh! В любом случае мне не нужен годовой или десятичный режим.
Очевидно, простой ответ - установить кнопку на IsEnabled="False"
, однако по какой-то причине это не работает! У меня <Button x:Name="PART_HeaderButton" IsEnabled="False"/>
и кнопка НЕ отключена. Иногда, если я удаляю IsEnabled
, а затем возвращаю его обратно, кнопка становится неактивной, но когда я перехожу к другому виду и обратно или перезапускаю приложение, она возвращается к нормальной кнопке. Установка Command={x:Null}
также не останавливает попытку кнопки выполнить (и, следовательно, сбой).
Так как я не понимаю, что, черт возьми, происходит, и не знаю, куда сосредоточьтесь, вот весь мой проклятый календарь:
<Calendar.CalendarItemStyle>
<Style TargetType="{x:Type CalendarItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CalendarItem}">
<ControlTemplate.Resources>
<!--DAY OF WEEK-->
<DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}">
<TextBlock FontSize="12" TextAlignment="Center" Text="{Binding}" VerticalAlignment="Center"/>
</DataTemplate>
</ControlTemplate.Resources>
<!--Entire calendar-->
<Border Padding="8 0" Background="{StaticResource BackgroundBlack}" x:Name="itemBorder">
<Grid Name="PART_Root">
<Grid.RowDefinitions>
<!--Month and month nav row-->
<RowDefinition Height="{StaticResource monthHeaderHeight}"/>
<!--Month view (days grid)-->
<RowDefinition/>
</Grid.RowDefinitions>
<!--TOP ROW (Month)-->
<DockPanel Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" LastChildFill="False">
<DockPanel.Resources>
<Style TargetType="Button" BasedOn="{StaticResource PlainTextButton}"/>
<Style TargetType="Button" BasedOn="{StaticResource PlainTextButton}" x:Key="arrowStyle">
<Setter Property="Height" Value="14"/>
<Setter Property="Width" Value="36"/>
</Style>
</DockPanel.Resources>
<!--MONTH NAVIGATION-->
<!--Unclear why they have to be in reverse order.-->
<Button x:Name="PART_NextButton" DockPanel.Dock="Right" Style="{StaticResource arrowStyle}">
<Image Source="/Resources/Images/Right.png"/>
</Button>
<Button x:Name="PART_PreviousButton" DockPanel.Dock="Right" Style="{StaticResource arrowStyle}">
<Image Source="/Resources/Images/Left.png"/>
</Button>
<!--CURRENT MONTH-->
<!--TODO: Make sure this is NOT CLICKABLE because clicking crashes (IsEnabled="False" doesn't seem to fix it)-->
<Button x:Name="PART_HeaderButton" IsEnabled="False"/>
</DockPanel>
<Grid Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<Grid x:Name="PART_MonthView">
<Grid.RowDefinitions>
<!--Weeks (first row is Days of the Week)-->
<RowDefinition Height="{StaticResource dayOfWeekHeight}"/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<!--Days-->
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
</Grid>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Calendar.CalendarItemStyle>