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