【问题标题】:How to define Button click handler in programmatic XAML definition如何在编程 XAML 定义中定义按钮单击处理程序
【发布时间】:2012-05-23 01:56:03
【问题描述】:

我在 Silverlight 4 的用户控件中为数据网格动态创建列,该控件工作正常。 数据网格的第一列是一个按钮,因此我使用以下代码为 DataGrid 添加 DataTemplate:

DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Search";
StringBuilder sb = new StringBuilder(); 
sb.Append("<DataTemplate ");
sb.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
sb.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>");
sb.Append("<Button Name='searchBtn' Width='25' Height='20' Click='performFastSearch' >");
sb.Append("<Image Source='http://localhost/SiteAssets/img/Homepage/ribbon_top_right.png'  Stretch='None' />");
sb.Append("</Button>");
sb.Append("</DataTemplate>");

templateColumn.CellTemplate = (DataTemplate)XamlReader.Load(sb.ToString());

如果我将 Click="performFastSearch" 部分保留在外,但在添加时会因“crossappdomainmarshaledexception”而中断,则该代码有效。

这是我应该尝试添加点击处理程序方法还是应该使用其他方法?

【问题讨论】:

    标签: silverlight button silverlight-4.0 datagrid


    【解决方案1】:

    您使用的 XAML 语法,您在其中为 Click 事件指定命名方法,仅当 XAML 在用户控件中定义时才有效,在这种情况下,Visual Studio 生成的代码将自动连接您的单击处理程序.当您在代码中创建 XAML 时,您必须在生成此 Button 时找到它并自行连接点击处理程序。

    渲染每一行时,处理加载事件以找到 Button 然后连接。这个blog post might help you

        void grid_LoadingRow(object sender, DataGridRowEventArgs e) 
        { 
            var btnCol =  
            m_DataGrid.Columns.FirstOrDefault(
                    c => c.GetValue(FrameworkElement.NameProperty) as string == "m_BtnColumn");
    
            FrameworkElement el = btnCol.GetCellContent(e.Row);
    
            Button btn = el as Button;
    
            if (btn != null) 
            {    
                btn.Click -= new RoutedEventHandler(btn_Click); 
                btn.Click += new RoutedEventHandler(btn_Click); 
            } 
        }
    
    
        void btn_Click(object sender, RoutedEventArgs e) 
        { 
    
        }
    

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多