为什么我不能在设计时解析ContentControl ContentTemplateSelector?
(运行时起作用)
Designer (VS2010)显示一个异常:
调用的目标引发了
System.Reflection.TargetInvocationException异常。
和
System.NullReferenceException对象引用未设置为对象的实例。
XAML:
<Window.Resources>
<DataTemplate x:Key="Temp1">
<TextBox TextWrapping="Wrap" Text="1" Height="20" Width="Auto"/>
</DataTemplate>
<local:TemplateSelector x:Key="mySelector"/>
<Grid>
<ContentControl ContentTemplateSelector="{StaticResource mySelector}">
<ContentControl.Content>
1
</ContentControl.Content>
</ContentControl>
</Grid>
</Window.Resources>C#:
public class TemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
//int num = int.Parse(item.ToString());
Window win = Application.Current.MainWindow;
return win.FindResource("Temp1") as DataTemplate;//load template based on num...
}
}发布于 2011-05-30 17:15:51
H.B.关于Application.Current.MainWindow在设计时是null是正确的。下面是一种按名称检索资源的更好方法:
public override DataTemplate SelectTemplate( object item, DependencyObject container ) {
var element = container as FrameworkElement;
if ( element != null ) {
var template = element.TryFindResource( "Temp1" ) as DataTemplate;
if ( template != null ) {
return template;
}
}
return base.SelectTemplate( item, container );
}但是,您的代码的其他部分仍然不完整,所以我希望您只是处于其中。例如,您的DataTemplate应该有绑定,而不是硬编码值。
发布于 2011-05-30 17:01:28
我怀疑Application.Current.MainWindow不是在设计时设置的。
https://stackoverflow.com/questions/6178782
复制相似问题