2016-04-14 89 views
-1

我的richtextbox有一個奇怪的問題。 我想檢測時,文本是粗體,斜體等WPF富文本框下劃線

E.g

if (richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString() == "Italic") // Pochylenie 
      { 
       heremycode 
      } 

如果我們使用

MessageBox(richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString());

我得到斜體。我想要做exacly同樣用下劃線和刪除,因爲我不能用

TextBlock.TextDecorationsProperty.ToString()

,因爲我只得到我認爲方法的名字嗎? Nothink像「斜體」,或「粗體」只是「FontStyleProperty」。

private void richTextBox_SelectionChanged(object sender, RoutedEventArgs e) 
    { 
     .... 
     if (richTextBox.Selection.GetPropertyValue(TextElement.FontStyleProperty).ToString() == "Italic" 
     { 
      backgroundP.Stroke = Brushes.Black; 
      backgroundP.Fill = Brushes.LawnGreen; 
      p = true; 
     } 

     TextRange selectionRange = new TextRange(richTextBox.Selection.Start, richTextBox.Selection.End); 

      if (selectionRange.GetPropertyValue(Underline.TextDecorationsProperty).Equals(TextDecorations.Underline)) 
      { 
       MessageBox.Show("Wow We did it :)"); 
       backgroundUnderline.Stroke = Brushes.Black; 
      } 
    } 

和XAML代碼:

<Grid x:Name="Center" Margin="10,231,10,10"> 
      <Rectangle Fill="#B2F4F4F5" Stroke="Black" Margin="1,0,-1,0"/> 
      <Label x:Name="labelNotepad" Content="Notepad" HorizontalAlignment="Left" VerticalAlignment="Top" Width="385" FontWeight="Bold" Background="#FFC1FCFF" FontSize="21.333" Height="56" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="2,1,0,0" BorderThickness="0,0,1,0"/> 
      <RichTextBox x:Name="richTextBox" Margin="1,58,0,0" FontSize="16" BorderThickness="1,2,1,1" BorderBrush="Black" UseLayoutRounding="False" VerticalScrollBarVisibility="Auto" Background="#7FFFFFFF" SelectionChanged="richTextBox_SelectionChanged"> 
       <FlowDocument/> 
      </RichTextBox> 

+0

的是從你嘗試的結果?異常或空字符串等? – SeeuD1

+0

在messageBox中,我只有一些像TextAligmentPropety這樣的方法,你知道的方法名稱,在另一箇中,我有像「左」,「粗體」等結果。 – Sagev

+0

你可以添加到你的問題和截圖或其他的東西幫助 – SeeuD1

回答

0

你有沒有嘗試過這樣的:

TextRange selectionRange = new TextRange(RichTextControl.Selection.Start, RichTextControl.Selection.End); 

     if (selectionRange.GetPropertyValue(Inline.TextDecorationsProperty) == TextDecorations.Underline) 
     { 
     } 

這應該工作,你東陽設置鴕鳥政策你只能對象名稱依賴屬性你想作爲一個字符串。裝飾可以是下劃線等你必須聲明你想檢查什麼

+0

它不工作,我試過這個,但它並不重要,我做什麼(選擇文本,或只是單擊RichTextBox)我的messageBox是沉默:D – Sagev

+0

mhm然後發佈更多的代碼,然後我可以看看它 – SeeuD1

0

我們需要看到更多的代碼,因爲SeeuD1的建議應該工作。但是,如果整個選擇都加下劃線,它纔會起作用。

如果您需要查看選擇中是否存在任何帶下劃線的文本,而不僅限於此,則需要檢查選擇中的所有內嵌對象。

在這個例子中,我將只檢查段落在您的FlowDocument:

 foreach (var block in RichTextBox.Document.Blocks.Where(x => selection.Start.CompareTo(x.ContentEnd) < 0 && selection.End.CompareTo(x.ContentStart) > 0)) 
     { 
      var paragraph = block as Paragraph; 
      if (paragraph != null) 
      { 
       foreach (var selectedInline in paragraph.Inlines.Where(x => selection.Start.CompareTo(x.ContentEnd) < 0 && selection.End.CompareTo(x.ContentStart) > 0)) 
       { 
        if (selectedInline.GetPropertyValue(Inline.TextDecorationsProperty) == TextDecorations.Underline) 
        { 
         MessageBox.Show("Wow We did it :)"); 
        } 
       } 
      } 
     }