solve the issue that cannot use converter in xamlreader in silverlight
时间:2011-03-09 来源:allanli
We cannot new a DataTemplate in code behind, otherwise it will popup an error.
There are two solutions to solve this problem, one is to define a DataTemplate in the .xaml file as resources. Such as:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:Local;assembly=Local">
<l:NegativeValueConveter x:Key="converter" />
<DataTemplate x:Key="Template">
<TextBlock
Text="{Binding BindingPath}"
Tag="{Binding Tag}"
HorizontalAlignment="Stretch"
Foreground="{Binding BindingPath,Converter={StaticResource converter}}"
TextDecorations="Underline"/>
</DataTemplate>
<ResourceDictionary/>
Make sure to replace the "l" with your own namespace and assembly.
The other solution is using xamlreader in code behind, such as:
StringBuilder sbTemp = new StringBuilder();
sbTemp.Append("<DataTemplate ");
sbTemp.Append("xmlns='http://schemas.microsoft.com/client/2007' ");
sbTemp.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
sbTemp.Append("xmlns:local='clr-namespace:test;assembly=test>");
sbTemp.Append("<Grid>");
sbTemp.Append("<Grid.Resources>");
sbTemp.Append("<local:DoubleToStyleConverter x:Key='DoubleToStyleConverter' />");
sbTemp.Append("</Grid.Resources>");
sbTemp.Append("<TextBox Text='{Binding [" + bindingPath + "],Mode=TwoWay}' ");
sbTemp.Append(" IsReadonly='true' ");
sbTemp.Append("Foreground=\"{Binding [" + bindingPath + "],Mode=TwoWay, Converter={StaticResource DoubleToStyleConverter}}\" ");
sbTemp.Append("/>");
sbTemp.Append("</Grid>");
sbTemp.Append("</DataTemplate>");
return (DataTemplate)XamlReader.Load(sbTemp.ToString());
1. Make sure to replace the "test" with your own namespace and assembly.