2011-11-15 46 views
4

我有一個richtextbox,裏面有一個列表框。我希望列表框位於插入符號的下方,並隨着插入符號的移動而移動。在richtextbox中定位listbox

我該怎麼做?

我應該操縱前兩個值listBox.Margin以及如何? 謝謝!

回答

4

這裏是我會做什麼(與你的列表框代替我的矩形):

<Window 
    x:Class="Wpf_Playground.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" 
    Height="350" 
    Width="525"> 
    <Grid> 
     <RichTextBox 
      Margin="0,0,0,32" 
      x:Name="rtb" 
      SpellCheck.IsEnabled="True" 
      SelectionChanged="RtbSelectionChanged" 
      TextChanged="RtbTextChanged"> 
     </RichTextBox> 
     <Rectangle 
      x:Name="rect" 
      Width="30" 
      Height="30" 
      Fill="#80000000" 
      VerticalAlignment="Top" 
      HorizontalAlignment="Left" 
      IsHitTestVisible="False"/> 
     <TextBlock 
      x:Name="tb" 
      Margin="0" 
      VerticalAlignment="Bottom" /> 
    </Grid> 
</Window> 

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 

namespace Wpf_Playground 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow 
    { 
     /// <summary> 
     /// Initializes a new instance of the <see cref="MainWindow"/> class. 
     /// </summary> 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void RtbSelectionChanged(object sender, RoutedEventArgs e) 
     { 
      this.UpdateCaretInfo(); 
     } 

     /// <summary> 
     /// The update caret info. 
     /// </summary> 
     private void UpdateCaretInfo() 
     { 
      var caretRect = 
       rtb.CaretPosition.GetCharacterRect(LogicalDirection.Forward); 
      tb.Text = caretRect.ToString(); 

      rect.Margin = new Thickness(
       caretRect.Right, 
       caretRect.Bottom, 
       -caretRect.Right, 
       -caretRect.Bottom); 
     } 

     private void RtbTextChanged(object sender, TextChangedEventArgs e) 
     { 
      this.UpdateCaretInfo(); 
     } 
    } 
} 
+0

非常感謝!我正在尋找這樣的東西:) – gumenimeda

+0

很高興成爲服務 –

+0

這太棒了。我查看了API,但一定錯過了這個。優秀作品。 :) –

0

我不確定如何獲得插入符的位置(雖然這是一個很棒的問題,但我很想知道如何),但我確實知道RichTextBox不能包含子元素。

我假設解決方案將沿着將RichTextBox和ListBox放置在Canvas中,並且每當RichTextBox的文本發生更改時將ListBox放置在Caret位置。

但是,我不知道如何檢索脫字符的位置。 :/

+0

是的,我一直想了一會兒:/謝謝你的文章! – gumenimeda