Salut im ayant un problème où une exception de référence null est levée dans mon xaml pour un contrôle utilisateur à l'aide d'un sélecteur de modèle de données et je ne suis honnêtement pas Bien sûr pourquoi. Voici le code ci-dessous et toute aide serait appréciée.Null Reference Exception levée lors de l'utilisation d'un sélecteur de modèle de données dans un contrôle utilisateur WPF
MISE À JOUR il ne se produit que lors de la conception pas lors de l'exécution
Modèle de données de code de sélection:
using System.Windows;
using System.Windows.Controls;
using UI.ViewModel;
namespace UI.DataTemplateSelectors
{
public class CouponViewerDataTemplateSelector : DataTemplateSelector
{
public DataTemplate coupon1DataTemplateSelector { get; set; }
public DataTemplate coupon2DataTemplateSelector { get; set; }
public DataTemplate coupon3DataTemplateSelector { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item == null)
return null;
var CouponViewerViewModel = (CouponViewerViewModel)item;
switch (CouponViewerViewModel.Coupon.CouponBarcode)
{
case "994460":
return Coupon1DataTemplateSelector;
case "994470":
return Coupon2DataTemplateSelector;
case "994480":
return Coupon3DataTemplateSelector;
}
return null;
}
}
}
XAML (j'effondrés les différents code DataTemplates que le fichier XAML est massive)
<UserControl x:Class="UI.View.CouponViewerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModel="clr-namespace:UI.ViewModel"
xmlns:converter="clr-namespace:UI.View.Converter"
xmlns:converters="clr-namespace:UI.Converters"
xmlns:Web="clr-namespace:Web;assembly=Web"
xmlns:dataTemplateSelectors="clr-namespace:UI.DataTemplateSelectors"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModel:CouponViewerViewModel, IsDesignTimeCreatable=True}"
Height="1018" Width="720">
<UserControl.Resources>
<converter:EmptyStringToVisibilityConverter x:Key="EmptyStringToVisibilityConverter"/>
<converters:AppendCharToBeginningAndEndOfStringConverter x:Key="AppendCharToBeginningAndEndOfStringConverter"/>
<converters:HexToBackgroundColourConverter x:Key="HexToBackgroundColourConverter"/>
<converters:HexToForegroundColourConverter x:Key="HexToForegroundColourConverter"/>
<converters:MaxCharcterSelectionNameConverter x:Key="MaxCharcterSelectionNameConverter"/>
<converters:DateTimeToSplitDataGridConverter x:Key="DateTimeToSplitDataGridConverter"/>
<converters:HeaderFormatterConverter x:Key="HeaderFormatterConverter"/>
<DataTemplate x:Key="Coupon1DataTemplateSelector" ...>
<DataTemplate x:Key="Coupon2DataTemplateSelector" ...>
<DataTemplate x:Key="Coupon3DataTemplateSelector" ...>
<dataTemplateSelectors:CouponViewerDataTemplateSelector
Coupon1DataTemplateSelector="{StaticResource Coupon1DataTemplateSelector}"
Coupon2DataTemplateSelector="{StaticResource Coupon2DataTemplateSelector}"
Coupon3DataTemplateSelector ="{StaticResource Coupon3DataTemplateSelector}"
x:Key="CouponViewerDataTemplateSelector" />
</UserControl.Resources>
<StackPanel>
<StackPanel x:Name="StackPanelToPrint">
<StackPanel.ContextMenu >
<ContextMenu>
<MenuItem Header="Print" Click="PrintCurrentForm" />
<MenuItem Header="OverLay Image" Command="{Binding Path=OverlayImageToCouponViewerCommand }" />
</ContextMenu>
</StackPanel.ContextMenu>
<Grid Margin="0,0,0,0">
<TextBlock Text="{Binding DesignTimeError}" Visibility="{Binding DesignTimeError, Converter={StaticResource EmptyStringToVisibilityConverter}}" Grid.ColumnSpan="2" Margin="0,0,0,34" />
<Canvas Grid.ColumnSpan="2" Margin="0,0,0,0">
<Rectangle Fill="Black" Width="8.5" Height="8.5" Canvas.Left="11" Canvas.Top="128" />
<Rectangle Fill="Black" Width="8.5" Height="8.5" Canvas.Left="742.5" Canvas.Top="128" />
<TextBlock Canvas.Left="338" FontSize="9" Foreground="Red" Canvas.Top="1046" Text="{Binding Path=MarkSenseCoupon.CouponBarcode}" />
<TextBlock FontFamily="Free 3 Of 9" Canvas.Left="24" Canvas.Top="1026" FontSize="110" Height="15" Text="{Binding Path=Coupon.CouponBarcode, Converter={StaticResource AppendCharToBeginningAndEndOfStringConverter}}"/>
<TextBlock Canvas.Left="409" FontSize="9" Foreground="Red" Canvas.Top="1046" Text="{Binding Path=MarkSenseCoupon.CouponInstance}" />
<TextBlock FontFamily="Free 3 of 9" Canvas.Left="409" Canvas.Top="1026" FontSize="110" Height="15" Text="{Binding Path=Coupon.CouponInstance, Converter={StaticResource AppendCharToBeginningAndEndOfStringConverter}}"/>
<Rectangle Fill="Black" Width="8.5" Height="8.5" Canvas.Left="11.5" Canvas.Top="1043" />
<Rectangle Fill="Black" Width="8.5" Height="8.5" Canvas.Left="742.5" Canvas.Top="1043" />
</Canvas>
<Image Canvas.ZIndex="1" Source="{Binding Coupon.OverlayImage}" Margin="0,-21,-76,108" Stretch="Fill" x:Name="PrintImageContextMenu" />
<StackPanel Margin="-105,146,66,0" Height="900" VerticalAlignment="Top" >
<ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource CouponViewerDataTemplateSelector}" />
</StackPanel>
</Grid>
</StackPanel>
</StackPanel>
</UserControl>
Stack Trace:
at UI.DataTemplateSelectors.CouponViewerDataTemplateSelector.SelectTemplate(Object item, DependencyObject container)
at System.Windows.Controls.ContentPresenter.ChooseTemplate()
at System.Windows.Controls.ContentPresenter.EnsureTemplate()
at System.Windows.Controls.ContentPresenter.OnPreApplyTemplate()
at System.Windows.FrameworkElement.ApplyTemplate()
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.UIElement.UpdateLayout()
Po Un double repli de [Qu'est-ce qu'une exception NullReferenceException et comment puis-je le réparer?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Albireo
Alors, où est l'exception lancée? – JeffRSon
Ill ajouter la trace de la pile maintenant à la question – philmckendry