Ошибка, которую вы получаете, заключается в том, что она пытается преобразовать строку во что-то значимое для компилятора XAML.Возможно, вам удастся создать для него преобразователь типов (реализованный с отражениями), но есть более простые способы обойти это.
Используйте расширение разметки x:Static
.
<object property="{x:Static prefix:typeName.staticMemberName}" ... />
См. Документы MSDN:
http://msdn.microsoft.com/en-us/library/ms742135.aspx
Согласно этой странице:
... большинство полезных статических свойств имеют такую поддержку, как преобразователи типов, которыеоблегчить использование, не требуя {x: Static} ...
Я полагаю, ваш пользовательский делегат этого не делает, и потребует от вас использования x:Static
.
Edit
Я опробовал его, и, похоже, он не работает с методами, как вы упоминали.Но это работает против свойств.Вот обходной путь:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<local:Class1 CheckFormat="{x:Static local:FCS.FormatDigitsOnly}" />
</Window>
namespace WpfApplication1
{
public delegate bool CheckFormatDelegate(int row, int col, ref string text);
public class Class1
{
public virtual CheckFormatDelegate CheckFormat { get; set; }
}
public class FCS
{
private static bool FormatDigitsOnlyImpl(int row, int col, ref string text)
{
return true;
}
public static CheckFormatDelegate FormatDigitsOnly
{
get { return FormatDigitsOnlyImpl; }
}
}
}
Редактировать 2
Я не хочу красть их ответы (поэтому, пожалуйста, проголосуйте вместо этого, если только выя предпочитаю обходные пути к свойствам), но здесь есть вопрос, у которого есть еще лучшее решение для вас:
Привязка статического метода / функции к свойству Func в XAML