2015-02-05 65 views
0

我試圖在列表框的ContentTemplateSelected運行時踢出一個DataTemplate。數據類型和值在運行時不知道。這是一個例子。當我把這個:WPF電話8在類型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

回答

1

我想你混淆了WPF行爲與Silverlight的XAML分佈於Windows和Windows Phone 8。不幸的是,ResourcesFrameworkElement基類的一個屬性,而DataTemplate則來自下級DependencyObject類。因此,它不支持資源收集。

作爲修復,考慮將轉換器作爲應用程序或頁面資源的一部分,而不是直接作爲DataTemplate的一部分。

+0

感謝您澄清,您建議的修復是我最初的問題 - 我的頂級是,當我將轉換器添加到它的資源時,我得到一個異常時加載xaml http://stackoverflow.com/questions/28350731/wpf-using-converter-in-datatemplate-created-from-xaml-text-and -xamlreader-on-pho/28353259#28353259 – jchristof 2015-02-05 22:10:33

+0

我有點擔心你選擇模板的方法。看起來你實際上試圖解析XAML,當選擇一個DataTemplate資源或UserControl資源的靜態實例並以編程方式分配它時,這可能是使用轉換器時感到困惑的根源。問題實際上可能是建築。 – lsuarez 2015-02-05 22:21:39

+0

我也很擔心;)如果您有強類型對象,我可以看到如何根據數據模板的目標類型進行選擇。我所擁有的是一串「字符串」(不知道在設計時有多少列,其中一些需要評估爲布爾運算,直到運行時再次不知道)。我試圖動態創建一個網格元素這些值佔據列表框的每一行。 – jchristof 2015-02-05 22:37:01

相關問題