Я пытаюсь создать AttachedProperty
для DataGridColumn
в Silverlight 3.0, и у меня возникают некоторые проблемы.
Вот прикрепленное свойство:
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. Я уверен, что могу сделать это в коде программной части, но я пытаюсь этого избежать.