我正在尝试在运行时为ListBox的ContentTemplateSelected踢出一个DataTemplate。数据类型和值在运行时是未知的。这是一个例子。当我这样称呼时:
var dataTemplate = (DataTemplate)XamlReader.Load(xaml.ToString());
生成的xaml:
<DataTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:DSI.MyProject.Converters;assembly=DSI.MyProject"
>
<DataTemplate.Resources>
<converters:StringValueToBoolConverter x:Key="stringValueToBoolConverter" />
</DataTemplate.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="128" />
</Grid.ColumnDefinitions>
<Border BorderThickness="1" BorderBrush="Black" Grid.Column="0" Background="{StaticResource PhoneContrastBackgroundBrush}" >
<CheckBox IsChecked="{Binding [CheckEd], Mode=TwoWay}" Padding="2" HorizontalAlignment="Left" />
</Border>
</Grid>
</DataTemplate>
我收到错误:
在DataTemplate类型中找不到可附加属性资源
我错过了包含的内容吗?
即使此示例不使用它,转换器也将用于IsChecked绑定。
这似乎对这个人有用: Dynamically added DataTemplate - StaticResource for Converter can't be found
我的原始问题:WPF using converter in datatemplate created from xaml text and XamlReader on phone 8
答案 0 :(得分:1)
我认为你将WPF行为与Windows和Windows Phone 8的SilverLight XAML发行版混淆。不幸的是,Resources是FrameworkElement基类的属性,而DataTemplate来自较低级DependencyObject级。因此,它不支持资源收集。
作为修复,请考虑将转换器作为Application或Page资源的一部分,而不是直接作为DataTemplate的一部分。