2

XAML で記述された WPFDataGridを C# に変換しています (聞かないでください)。

次のようになります (簡潔にするために一部のプロパティは省略されています)。

var Card = new DataGrid() {
    Background          = Brushes.LightYellow,
    BorderBrush         = Brushes.DimGray,
    ColumnWidth         = new DataGridLength(100),
    Columns             = {
        new DataGridTextColumn() {
            Binding     = new Binding("In"),
            Header      = "In"
        },
        new DataGridTextColumn() {
            Binding     = new Binding("Out"),
            Header      = "Out"
        },
        new DataGridTextColumn() {
            Binding     = new Binding("Hours"),
            Header      = "Hours"
        }
    },
    RowHeaderTemplate   = new DataTemplate(typeof(DataGridRowHeader)) {
        VisualTree      =  Days
    },
    RowHeaderWidth      = 115,
    RowHeight           = 50
};

Days次のように設定されています:

var Days = new FrameworkElementFactory(typeof(TextBlock));
Days.SetBinding(TextBlock.TextProperty, new Binding("Day"));
Days.SetValue(TextBlock.BackgroundProperty, Brushes.Lime);

実行すると、は空白になります (およびDataGridではありません)。RowHeaderLightYellowLime

Card.RowHeaderTemplate.VisualTree = Days;も試してみましたが、役に立ちませんでした。

どこが間違っていますか?プログラムでどのように設定できRowHeaderTemplateますか?

4

1 に答える 1

1

テンプレートは、XAML からの読み込みを使用して作成する必要があります。要素ファクトリの使用は廃止され、サポートされなくなりました (場合によっては機能しますが、他の場合には機能しません)。

たとえば、Caliburn.Micro は次のような既定のデータ テンプレートを作成します。

    public static DataTemplate DefaultHeaderTemplate = (DataTemplate)
#if SILVERLIGHT || WinRT
    XamlReader.Load(
#else
    XamlReader.Parse(
#endif
       "<DataTemplate " +
       "    xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>" +
       "    <TextBlock Text=\"{Binding DisplayName, Mode=TwoWay}\" />" +
       "</DataTemplate>"
    );

役に立つかもしれない別のリンク: Creation WPF Data Templates in Code The Right Way。XML および XAML クラスを使用して XAML 文字列を作成するサンプルが含まれており、アセンブリなどへの参照が含まれています。

于 2014-08-25T00:07:21.060 に答える