我正在使用XamlReader:Load解析DataTemplate。是否可以传递静态资源(如值转换器)?另外,是否有一种方法可以在加载后修改结果DataTemplate;例如,附加事件处理程序?
发布于 2017-10-02 07:40:39
是否可以传递静态资源(如值转换器)?
是。你能做到的。你只需要注意到Any custom assemblies referenced in a XAML namespace mapping must already be available to the application.
我已经制作了代码示例供您参考,我的代码是C#代码,但是数据板字符串是相同的。
namespace AppXamlLoad
{
public class MyConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return "test";
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
}StringBuilder sbTemp = new StringBuilder();
sbTemp.Append("<DataTemplate ");
sbTemp.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
sbTemp.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
sbTemp.Append("xmlns:local='using:AppXamlLoad'>");
sbTemp.Append("<Grid>");
sbTemp.Append("<Grid.Resources>");
sbTemp.Append("<local:MyConverter x:Key='myconverter'></local:MyConverter>");
sbTemp.Append("</Grid.Resources>");
sbTemp.Append("<TextBox Margin='2'");
sbTemp.Append(" Text='{Binding");
sbTemp.Append(" Converter={StaticResource myconverter}}'/>");
sbTemp.Append("</Grid>");
sbTemp.Append("</DataTemplate>");
DataTemplate dt = XamlReader.Load(sbTemp.ToString()) as DataTemplate;
mylsiview.ItemTemplate = dt; //mylistview is my listview control in xaml page是否有方法在加载后修改结果DataTemplate;例如,附加事件处理程序?
是。
对象创建逻辑不能在运行时将加载的XAML与代码隐藏类集成起来。如果要添加事件处理程序,则必须在代码中引用从加载结果的对象树结构中获得的对象,并使用特定于语言的语法来附加处理程序。来自MSDN
曾傑瑞尼克松也曾回答过类似的问题,详情请参阅:在代码隐藏中处理由XamlReader.Load加载的数据模板中的事件
https://stackoverflow.com/questions/46509051
复制相似问题