Я пытаюсь создать AttachedProperty
для DataGridColumn
в Silverlight 3.0, и у меня возникают некоторые проблемы.
Вот свойство AttachedProperty:
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);
}
}
Как вы видите, это действительно просто, я пытаюсь преодолеть ограничение на то, что свойство Header в классе DataGridColumn не может быть связано.
Этот 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 [Строка: 224 Позиция: 112]
в System.Windows.Application.LoadComponent (объектный компонент, Uri resourceLocator)
....})
<Controls:DataGridTextColumn Binding="{Binding OwnerName}"
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="{Binding Resources.UserNameListViewHeading, Source={StaticResource Labels}}"/>
Просто для экспериментов я прикрепил это свойство (с приведенным выше синтаксисом привязки) к DataGrid
и проверил свойство DataGridColumnHelper.Header
в методе OnHeaderPropertyChanged
, и значение было правильным (исключение не было выброшено)
Насколько я понимаю, объект, к которому присоединен объект AttachedProperty, должен быть DependencyProperty
. Если смотреть через Reflector, DataGridColumn
(из которого DataGridTextColumn
происходит) происходит от DependencyProperty
.
Может кто-нибудь, пожалуйста, пролить свет на это? Я пытаюсь локализовать наше приложение, и у меня возникают проблемы с DataGrid. Я уверен, что я могу сделать это в коде позади, но я пытаюсь избежать этого.