一千萬個為什麽

搜索

在運行時更改DataTemplate TextBlock屬性

我有一個DataTemplate定義如下:

我在運行時使用以下代碼訪問它:

  else
                {
                    template = (DataTemplate)FindResource("GridViewTextBlockDataTemplate");

                    var textblock = (TextBlock) template.LoadContent();
                    textblock.Text = "bye";

                    //textblock.SetBinding(TextBlock.TextProperty, new Binding("[" + current.Key + "]"));
                }

                var column = new GridViewColumn
                                 {
                                     Header = current.Key,
                                     CellTemplate = template  
                                 };

                                gridView.Columns.Add(column);
            }

現在我想將textblock屬性更改為我該怎麽做?它似乎總是空白。

最佳答案

DataTemplate是用於創建內容的模板。在模板上調用LoadContent時,它會創建該模板定義的內容。因此,當您對TextBlock進行更改時,它僅應用於內容的一個實例,而不應用於DataTemplate本身。

我假設您需要這樣做以基於傳遞給函數的屬性生成綁定。您可以通過直接在代碼中生成模板來完成此操作。它比XAML更難理解,但這應該可以解決問題:

    private DataTemplate GenerateTextBlockTemplate(string property)
    {
        FrameworkElementFactory factory = new FrameworkElementFactory(typeof(TextBlock));
        factory.SetBinding(TextBlock.TextProperty, new Binding(property));

        return new DataTemplate { VisualTree = factory };
    }

轉載註明原文: 在運行時更改DataTemplate TextBlock屬性