c# - 动态数据模板 silverlight 事件

标签 c# silverlight events datatemplate

查找有关如何仅使用代码将事件挂接到 silverlight 的 DataTemplate 的信息。这会使我的浏览器在呈现时崩溃。

private DataTemplate Create(Type type)        
{            
  DataTemplate dt = new DataTemplate();            
  string xaml = "<DataTemplate x:Name='dt' xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:basics='clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls'  >"
                + "<Border Height='135' Width='110' HorizontalAlignment='Left' VerticalAlignment='Top' Background='#7FFCFAFA' CornerRadius='5,5,5,5'>"
                + "<StackPanel Orientation='Vertical' Width='110' Height='135'>"
                + "<Image Source='{Binding Path=ThumbnailPath}' Width='64' Height='64' Margin='5'  HorizontalAlignment='Left' />"
                + "<TextBlock Text='{Binding Path=Title}' Margin='5' FontFamily='Verdana' HorizontalAlignment='Left' TextWrapping='Wrap' Foreground='#FFFAF8F8' Width='100' FontSize='9' />"
                + "<TextBlock Text='{Binding Path=FileDuration}' Margin='5' FontFamily='Verdana' HorizontalAlignment='Left' Foreground='#FFFAF8F8' Width='100' FontSize='9'/>"
                + "<StackPanel Orientation='Horizontal' Background='{x:Null}' x:Name='GridMenuBar'>"
                + "<Button ClickMode='Press' x:Name='play_buttons' HorizontalAlignment='Left' Template='{StaticResource GlassPlay}'  BorderBrush='{x:Null}' Foreground='#FFF9F7F7' Background='{x:Null}' />"
                //+ "<Button Height='Auto' HorizontalAlignment='Left' VerticalAlignment='Top' Width='Auto' Content='Button' x:Name='addPlayListItemButton' Template='{StaticResource GlassAddPlaylist}' Click='addPlayListItemButton_Click' />"
                + "</StackPanel>"
                + "</StackPanel>"
                + "</Border>"
                + "</DataTemplate>"; 
    dt = (DataTemplate)XamlReader.Load(xaml);
    return dt;
}

最佳答案

你得到了什么样的异常?您可以通过查看浏览器状态栏中的脚本错误图标找到它。除非你的意思是这实际上完全杀死了浏览器进程。这不应该发生,但如果发生,您可以在导航到该页面之前将 Visual Studio 附加到您的浏览器进程。

现在,我对问题出在哪里有了一些猜测。首先,您在模板中引用了一些仅存在于页面范围内的组件。例如,您的按钮引用了一个静态模板“GlassPlay”,它还(尽管被注释掉了)引用了一个处理程序 addPlayListItemButton_Click ,它将驻留在代码隐藏中。 XamlReader 没有上下文来理解将这些东西连接到哪里。


只是内部提示,用户控件不会使用 XamlReader 加载自身,而是使用 Application.LoadComponent 加载。 LoadComponent 确实有一些范围,但它仍然期望所有标记作为一个单元加载,并期望它们全部来自资源 URI(无法从字符串加载)。


动态数据模板是可能的,甚至引用模板外的资源也应该没问题。我知道这在 WPF 中有效,并且在将模板添加到可视化树时解析资源。我不确定它在 Silverlight 中是否有效,但我很确定它确实有效。

点击处理程序是您最大的问题。不要尝试在标记中分配处理程序。相反,给按钮一个名称并使用 FindName加载后在模板实例上获取按钮。从那里您可以订阅代码中的事件。

希望对您有所帮助。

关于c# - 动态数据模板 silverlight 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/531236/

相关文章:

c# - C# 中的内联 C 和编译?

c# - 如何获取文件到WP7?

mysql - 根据时间更新不同的行?

c# - 在 C# 中,try-catch 应该用于数字测试吗?

c# - 如何在 "richTextBox.Lines"数组中将符号编号更改为大写...?

c# - 评估方法 System.Linq.Enumerable.ToList() 调用 QuickWatch 中的本地方法 Interop+Kernel32.FindStringOrdinal()

c# - 以编程方式清除 Silverlight 应用程序存储?

silverlight - 认证ashx请求的最佳实践

javascript - 即使移动位置如何确保按钮被点击

javascript - 如何从 JS 中的事件对象构建 CSS 选择器?