如何在xaml中将控件的属性设置为函数的地址?

时间:2010-03-19 20:10:45

标签: wpf xaml function-pointers staticresource

我有一个具有“Filter”属性的控件,该属性需要一个函数来定义如何过滤控件的内容。到目前为止,我正在设置代码后面的过滤器:

MyControl.Filter = AddressOf Filters.MyFilter

在此示例中,MyFilter是Filters类中的共享函数,具有以下签名:

Public Shared Function MyFilter(ByVal obj As Object, ByVal text As String) As Boolean

我想在xaml中设置它。我正在考虑将Filters.MyFilter设置为静态资源并将其设置为:

...Filter="{StaticResource myFilter}"/>

但我无法将Filters.MyFilter设置为静态资源。关于如何实现这一点的任何想法?

谢谢,

1 个答案:

答案 0 :(得分:0)

你不能直接这样做。除了作为事件处理程序之外,XAML不提供引用函数的方法。

您可以通过创建具有谓词类型属性的对象来间接地执行此操作:

public class FilterOMatic
{
  public Predicate<int> FilterProc
  {
    get { return n => (n % 2) == 0; }
  }
}

(原谅C#-ism-我不太熟悉返回函数的VB语法。我认为它会像Return AddressOf Filters.MyFilter那样但我可能错了。 )

现在,您可以将FilterOMatic实例化为资源,并通过绑定到该资源来引用其FilterProc属性:

<Window.Resources>
  <local:FilterOMatic x:Key="fom" />
</Window.Resources>

<MyObject Filter="{Binding FilterProc, Source={StaticResource fom}}" />