当我在代码中创建DataTemplate时,我在定义命名空间时遇到错误。
以下是我正在使用的代码
public static DataTemplate CreateDataTemplate(string bindingValue)
{
StringBuilder dataTemplateText = new StringBuilder();
dataTemplateText.Append("<DataTemplate ");
dataTemplateText.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
dataTemplateText.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
dataTemplateText.Append("xmlns:interactivity='http://schemas.microsoft.com/expression/2010/interactivity' ");
// Custom NameSpace
dataTemplateText.Append("xmlns:valueConverter='clr-namespace:AttachedPropertiesTest.ValueConverter;assembly=AttachedPropertiesTest'> ");
dataTemplateText.Append("xmlns:wtf='clr-namespace:AttachedPropertiesTest.wtf;assembly=AttachedPropertiesTest'> ");
//
dataTemplateText.Append("<Grid>");
dataTemplateText.Append("<Grid.Resources>");
dataTemplateText.Append("<valueConverter:RowIndexConverter x:Key='rowIndexConverter' />");
dataTemplateText.Append("</Grid.Resources>");
dataTemplateText.Append("<TextBlock ");
dataTemplateText.Append("Text = '{Binding ");
dataTemplateText.Append("Converter={StaticResource rowIndexConverter}, ConverterParameter=" + bindingValue + " }' >");
dataTemplateText.Append(" <interactivity:Interaction.Triggers> ");
dataTemplateText.Append(" <interactivity:EventTrigger EventName='MouseLeftButtonDown' > ");
dataTemplateText.Append(" <wtf:InvokeDelegateCommandAction CommandName='CellCommand' Command='{Binding CellCommand, Source={StaticResource mainViewModel}}' CommandParameter='{Binding Converter={StaticResource rowIndexConverter}, ConverterParameter=" + bindingValue + " }' /> ");
dataTemplateText.Append(" </interactivity:EventTrigger> ");
dataTemplateText.Append(" </interactivity:Interaction.Triggers> ");
dataTemplateText.Append("</TextBlock>");
dataTemplateText.Append("</Grid>");
dataTemplateText.Append("</DataTemplate>");
DataTemplate dataTemplate = (DataTemplate)XamlReader.Load(dataTemplateText.ToString());
return dataTemplate;
}
我收到以下错误:
无法创建 'System.Windows.DataTemplate'来自 文本 '的xmlns:WTF =' CLR-名称空间:AttachedPropertiesTest.wtf;装配= AttachedPropertiesTest'&GT; ”。
当我只有一个命名空间时,我设置了它的组件。
我可以通过将所有代码放在一个Namespace定义中来使我的代码工作。我只是不喜欢这项工作。
通过定义命名空间,有没有人知道我做错了什么。
答案 0 :(得分:1)
第一个自定义命名空间包含一个不应该在那里的右括号。
dataTemplateText.Append(“xmlns:valueConverter ='clr-namespace:AttachedPropertiesTest.ValueConverter; assembly = AttachedPropertiesTest'&gt;”);
应该是:
dataTemplateText.Append(“xmlns:valueConverter ='clr-namespace:AttachedPropertiesTest.ValueConverter; assembly = AttachedPropertiesTest'”);
答案 1 :(得分:0)
您可以尝试像这样声明字符串:
dataTemplateText = @"
<DataTemplate
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:interactivity='http://schemas.microsoft.com/expression/2010/interactivity'
{more here...}
";
因此值更具可读性。