【问题标题】:Passing resource to XamlReader将资源传递给 XamlReader
【发布时间】:2017-10-02 15:45:24
【问题描述】:

我正在使用XamlReader::Load 来解析DataTemplate。是否可以传递值转换器等静态资源?另外,有没有办法在加载后修改生成的DataTemplate;例如,附加事件处理程序?

【问题讨论】:

    标签: xaml uwp


    【解决方案1】:

    是否可以传递值转换器等静态资源?

    是的。你能做到这一点。你只需要注意Any custom assemblies referenced in a XAML namespace mapping must already be available to the application.

    我已经做了代码示例供大家参考,我的代码是C#代码,但是datatemplate字符串是一样的。

    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

    Jerry Nixon 回复了一个类似的帖子,详情请参考:Handle an event in a Data Template loaded by XamlReader.Load(xaml) in code-behind

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2019-08-25
      • 2013-09-06
      相关资源
      最近更新 更多