2016-04-14 29 views
-1

Zengin metin kutumda garip bir sorun var. BenceWPF Zengin metin kutusu altı çizili

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

kullanmak ben İtalik alırsanız İtalik vb

Örn

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

, metin Kalın olduğunda algılamak istiyorum. i düşünmek yöntemin sadece adını almak çünkü

TextBlock.TextDecorationsProperty.ToString(),

kullanamazsınız çünkü çizili, altı çizilerek exacly aynı şeyi istiyor ve? Nothink, "italik" veya "kalın" gibi sadece "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; 
      } 
    } 

Ve XAML Kod:

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

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

bu sizin ayarladığınız Sakın beacause sadece Nesne adını almak, çalışması gerekir:

<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

sizin denemede gelen sonuç budur: Ben sadece FlowDocument paragraflar kontrol edecek Bu örnekte

? Bir Özel Durum veya Boş bir dize vb. – SeeuD1

+0

Ileti kutusu içinde sadece TextAligmentPropety gibi bir şey var, bildiğiniz yöntemin adı, diğerinde "sol", "kalın" vb. Gibi bir sonuç var – Sagev

+0

bunu bir soruya ve bir ekran görüntüsüne veya başka bir şeye ekleyebilirsiniz help – SeeuD1

cevap

0

bu denediniz bağımlılık özelliği bir dizge olarak sahip olmak istediğiniz şey. Dekorasyon altını çizebilir vb. Kontrol etmek istediğinizi bildirmeniz gerekir

+0

Bunu denedim işe yaramadı ama ne yaptığım önemli değil (metin seç, ya da sadece RichTextBox'a tıkla) benim messageBox'um sessiz: D – Sagev

+0

mhm sonra kodundan daha sonra yayınla üzerine bir göz atabilir – SeeuD1

0

Kodunuzun daha fazlasını görmemiz gerekir, çünkü SeeuD1'in önerisi çalışmalıdır. Ancak, yalnızca tüm seçimin altı çiziliyse çalışır. YALNIZCA, seçimde alt çizgilerden herhangi birinin olup olmadığını görmeniz gerekiyorsa, SADECE seçimden sonra tüm satır içi nesneleri denetlemeniz gerekir.

 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 :)"); 
        } 
       } 
      } 
     }