我正在尝试在 Silverlight 3.0AttachedProperty
中为 a创建一个,DataGridColumn
但我遇到了一些问题。
这是附加属性:
public class DataGridColumnHelper
{
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.RegisterAttached("Header", typeof(string), typeof(DataGridColumnHelper),
new PropertyMetadata(OnHeaderPropertyChanged));
private static void OnHeaderPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
string header = GetHeader(d);
var dataGridColumn = d as DataGridColumn;
if (dataGridColumn == null)
{
return;
}
dataGridColumn.Header = GetHeader(dataGridColumn);
}
public static string GetHeader(DependencyObject obj)
{
return (string)obj.GetValue(HeaderProperty);
}
public static void SetHeader(DependencyObject obj, string value)
{
obj.SetValue(HeaderProperty, value);
}
}
如您所见,它非常简单,我正在尝试克服 DataGridColumn 类中的 Header 属性无法绑定的限制。
此 XAML 按预期工作...
<Controls:DataGridTextColumn Binding="{Binding OwnerName}"
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="User Name"/>
但是,此 XAML 会引发错误...(具体而言:{System.Windows.Markup.XamlParseException: AG_E_PARSER_PROPERTY_NOT_FOUND [Line: 224 Position: 112] at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) ....} )
<Controls:DataGridTextColumn Binding="{Binding OwnerName}"
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="{Binding Resources.UserNameListViewHeading, Source={StaticResource Labels}}"/>
只是为了实验,我将此属性(使用上面的绑定语法)附加到 aDataGrid
并检查方法DataGridColumnHelper.Header
中的属性OnHeaderPropertyChanged
并且值正确(并且没有引发异常)
据我了解,AttachedProperty 附加到的对象必须是DependencyProperty
. 透过 Reflector 看,DataGridColumn
(从中DataGridTextColumn
派生)派生自DependencyProperty
.
有人可以对此有所了解吗?我正在尝试本地化我们的应用程序,但我在使用 DataGrid 时遇到了问题。我确信我可以在代码隐藏中做到这一点,但我试图避免这种情况。