Silverlight 3.0 内でAttachedProperty
forを作成しようとしていますが、いくつか問題があります。DataGridColumn
ここに 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 クラスの 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}}"/>
実験のために、このプロパティを (上記のバインディング構文で) にアタッチし、メソッドでプロパティDataGrid
をチェックしたところ、値は正しかった (そして例外はスローされなかった)DataGridColumnHelper.Header
OnHeaderPropertyChanged
AttachedProperty がアタッチされているオブジェクトはDependencyProperty
. Reflector を調べると、DataGridColumn
(DataGridTextColumn
派生元) は から派生しDependencyProperty
ます。
誰かがこれに光を当てることができますか?アプリケーションをローカライズしようとしていますが、DataGrid に問題があります。コードビハインドでこれを実行できると確信していますが、それを回避しようとしています。