2011-03-29 76 views
2


我們通過向TextBlock.Inlines添加一系列System.Windows.Documents.Run對象來爲TextBlock格式化文本。S1 4,MVVM:在TextBlock中使用內聯,如何綁定到ViewModel?

我們如何綁定ViewModel中的格式化文本以顯示在TextBlock中?

感謝您的任何意見...

+0

在你的ViewModel是什麼語法用於「格式化文本」? – AnthonyWJones 2011-03-29 14:28:15

+0

我正在將VM加裝到現有的應用程序中,因此它尚未在VM中定義。目前,我們構建了一系列運行對象並將它們添加到TextBlock:TextBlock.Inlines.Add(run)。 – Number8 2011-03-29 15:00:23

+0

如果您「當前構建一系列運行對象」,這意味着您有一些已格式化的現有數據。存儲此文本時,您目前使用哪種形式的標記? HTML,RTF,SGML還是其他? – AnthonyWJones 2011-03-29 15:07:03

回答

0

我試圖創造一個aViewModel InlineCollection屬性,然後設置在XAML的約束力,但在TextBlock中InlineCollection不綁定的,因爲它不是一個DependencyProperty。答案to this question顯示創建您自己的控件,並使其成爲DependencyProperty,這是一個好的解決方法。

VM:

private InlineCollection inlineCollection; 

public InlineCollection TextBlockInlineCollection { 
    get 
    { 
     return inlineCollection; 
    } 
    set 
    { 
     inlineCollection = value; 
     NotifyPropertyChanged("TextBlockInlineCollection"); 
    } 
} 

XAML: //不起作用

您也可以在動態代碼中使用XamlReader創建的TextBlock: 例如:

string textBlock = @"<TextBlock xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' x:Name='infoBarTextBlockWithFormatting' AutomationProperties.AutomationId='infoBarTextBlockWithFormatting' Margin='9,0,0,0' TextWrapping='Wrap'>"; 
    textBlock = String.Concat(textBlock, e.NewValue.ToString(), "</TextBlock>"); 
    infoBar.infoBarRunHolder.Child = (TextBlock)XamlReader.Load(textBlock); 
相關問題