我有一個richtextbox,裏面有一個列表框。我希望列表框位於插入符號的下方,並隨着插入符號的移動而移動。在richtextbox中定位listbox
我該怎麼做?
我應該操縱前兩個值listBox.Margin
以及如何? 謝謝!
我有一個richtextbox,裏面有一個列表框。我希望列表框位於插入符號的下方,並隨着插入符號的移動而移動。在richtextbox中定位listbox
我該怎麼做?
我應該操縱前兩個值listBox.Margin
以及如何? 謝謝!
這裏是我會做什麼(與你的列表框代替我的矩形):
<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();
}
}
}
我不確定如何獲得插入符的位置(雖然這是一個很棒的問題,但我很想知道如何),但我確實知道RichTextBox不能包含子元素。
我假設解決方案將沿着將RichTextBox和ListBox放置在Canvas中,並且每當RichTextBox的文本發生更改時將ListBox放置在Caret位置。
但是,我不知道如何檢索脫字符的位置。 :/
是的,我一直想了一會兒:/謝謝你的文章! – gumenimeda
非常感謝!我正在尋找這樣的東西:) – gumenimeda
很高興成爲服務 –
這太棒了。我查看了API,但一定錯過了這個。優秀作品。 :) –