如何将控件作为参数传递给委托

时间:2011-10-18 08:00:16

标签: c# delegates code-behind

我需要为在后面的代码中创建的ComboBox设置ComboBoxItem的样式。到目前为止,这是我的代码

ComboBox cbo1 = new ComboBox();                
cbo1.IsTextSearchEnabled = true;
cbo1.IsEditable = true;

grid1.Children.Add(cbo1); 

cbo1.Dispatcher.BeginInvoke(new StyleComboBoxItemDelegate(ref StyleComboBoxItem(cbo1), System.Windows.Threading.DispatcherPriority.Background);

public delegate void StyleComboBoxItemDelegate(ComboBox cbo_tostyle);

public void StyleComboBoxItem(ComboBox cbo_tostyle)
{
//code to style the comboboxitem;
}

我收到以下错误

1. A ref or out argument must be an assignable variable
2. Method name expected

请有人帮助我指出我做错了什么吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

StyleComboBoxItem()“返回”无效,因此通过使用ref StyleComboBoxItem(...),您实际上是在尝试创建对void的引用。

你可以:

  • 将ComboBox设置为单独的一行,然后将样式化的ComboBox提供给代理
  • StyleComboBoxItem()返回它设置的ComboBox,这样你仍然可以使用它内联

不需要参考。

答案 1 :(得分:1)

尝试使用以下任何一种方法:

cbo1.Dispatcher.BeginInvoke(
    (Action)(() => StyleComboBoxItem(cbo1)), 
    System.Windows.Threading.DispatcherPriority.Background);

cbo1.Dispatcher.BeginInvoke(
    (Action)(() =>
    {
        //code to style the comboboxitem;
    }),
    System.Windows.Threading.DispatcherPriority.Background);