2012-01-31 69 views
2

我希望能夠去除FlowDocument的各種內聯元素之間的空白。下面是一個非常具體的例子,只是爲了讓問題清楚。期望的輸出是「Hello World?」但是會發生什麼是「Hello World?」。在這種情況下 」?」是一個可點擊的按鈕。刪除C#Flowdocument元素之間的空格嗎?

我已經搜索了一段時間沒有成功。我嘗試了所有形式的墊/邊距調整,但它們只能增加間距。我開始相信這個空間是FlowDocument元素邊界所固有的。這似乎是一個系列限制。

<RichTextBox> 
    <FlowDocument> 
    <Paragraph Margin="0"> 
     <Run> 
     Hello World 
     </Run> 
     <InlineUIContainer> 
     <Button Click="ButtonClick">?</Button> 
     </InlineUIContainer> 
    </Paragraph> 
    </FlowDocument> 
</RichTextBox> 
+0

運行似乎在最後得到像1/2空間。我不知道它的方式。 – Paparazzi 2012-01-31 22:14:29

回答

0

你可以添加切緣陰性的按鈕,使之適合接近:

<InlineUIContainer><Button Margin="-3,0">?</Button></InlineUIContainer> 
4

醜如格式化看起來,在基於XML的XAML,如果你想避免運行之間的空白,你不能在元素的關閉標籤和開放標籤之間留出空間。 試試這個:

<RichTextBox> 
    <FlowDocument> 
    <Paragraph Margin="0"> 
     <Run> 
     Hello World 
     </Run><InlineUIContainer> 
      <Button Margin="0" >?</Button> 
     </InlineUIContainer> 
    </Paragraph> 
    </FlowDocument> 
</RichTextBox> 
1

好吧,這個問題是怎麼一回事,因爲special whitespace handling rules.

理念的解決方案的: 預處理XAML中刪除標記之間的新行/空格字符。

實施

  1. 移動你的款到ResourceDictionary中(例如Strings.xaml)。
  2. 將Strings.xaml的「Build Action」設置爲「Resource」(所以它將作爲文本存儲,而不是二進制文件)。
  3. 加載它,使用下面的代碼刪除空格:

    var uri = @"pack://application:,,,/YourProjectName;component/PathToDictionary/Strings.xaml"; 
    var resourceInfo = Application.GetResourceStream(uri); 
    using (var xmlReader = new XmlTextReader(resourceInfo.Stream) { WhitespaceHandling = WhitespaceHandling.None}) 
    {      
        var xamlReader = new System.Windows.Markup.XamlReader();      
        dictionary = (ResourceDictionary)xamlReader.LoadAsync(xmlReader); 
    } 
    
  4. 添加資源字典的實體資源,至極應使用段落:

    MyControl.Resources.MergedDictionaries.Add(dictionary); 
    
  5. That`s所有,沒有額外的運行與空白裏面將被創建。

用我們自己定製的本地化ResorceDictionary後裔`米,至極有一個選項來刪除空格,並自動處理所有這些東西。