我在相同的系統和相同的鍵盤屬性上測驗了 Word 2010 和 Word 2019。我沒有更改 Windows 鍵盤的屬性。
游標移動和游標閃爍在 Word 2010 中很快,但在 Word 2019 中非常慢。
我想在 wpf 專案中修改游標的閃爍率和移動速度。
怎么做?謝謝你的幫助。
<Grid>
<TextBox x:Name="tb" Height="230" Padding="4" TextWrapping="Wrap" AcceptsReturn="True" Width="320" Focusable="True" Loaded="tb_Loaded" />
</Grid>
private void tb_Loaded(object sender, RoutedEventArgs e)
{
Keyboard.Focus(tb);
}
編輯:我看過這里,但不知道它是否正確以及如何去做。
uj5u.com熱心網友回復:
WPF 基本上尊重 Windows 的閃爍率控制面板設定。我的系統上的 Word 2019 也是如此。如果您想更改文本框上的速率,您唯一的選擇是禁用內置插入符號(文本游標),然后自己繪制。
以下是受這篇文章啟發而無恥竊取的,并解決了一些問題:
SelectionChanged當文本框高度不是行高的完整倍數時觸發太早導致錯誤的游標定位。改為LayoutUpdated。Caret.Height尊重文本高度,而不是硬編碼。
現在開始魔術。試試這個MainWindow.xaml:
<Grid x:Name="YouNeedAGridToContainTheTextBoxAndCanvas">
<TextBox x:Name="CustomTextBox"
FontSize="20"
AcceptsReturn="True" TextWrapping="Wrap"
CaretBrush="Transparent" />
<!--CaretBrush must be Transparent, as we will draw manually below-->
<Canvas ClipToBounds="True">
<Border x:Name="Caret"
Width="4"
Visibility="Collapsed"
Background="Transparent"> <!--Start drawing Transparent-->
<Border.Triggers>
<EventTrigger RoutedEvent="Border.Loaded">
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever">
<ColorAnimationUsingKeyFrames
Storyboard.TargetProperty="Background.Color"
FillBehavior="HoldEnd">
<ColorAnimationUsingKeyFrames.KeyFrames>
<!--Ease to Red in 1sec-->
<EasingColorKeyFrame KeyTime="0:0:1.0" Value="Red"/>
<!--Ease back into Transparent in another 1sec-->
<EasingColorKeyFrame KeyTime="0:0:2.0" Value="Transparent" />
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Border.Triggers>
</Border>
</Canvas>
</Grid>
然后,您需要使用后面的代碼手動更新繪圖位置MainWindow.xaml.cs:
public MainWindow() //Constructor
{
InitializeComponent();
CustomTextBox.LayoutUpdated = (_, _) => {
var rect = CustomTextBox.GetRectFromCharacterIndex(CustomTextBox.CaretIndex);
if (rect.IsEmpty) return;
Canvas.SetLeft(Caret, rect.Left);
Canvas.SetTop(Caret, rect.Top);
Caret.Height = rect.Height;
};
CustomTextBox.LostFocus = (_, _) => Caret.Visibility = Visibility.Collapsed;
CustomTextBox.GotFocus = (_, _) => Caret.Visibility = Visibility.Visible;
CustomTextBox.Focus();
}
隨意調整顏色影片,根據需要添加幀并使用KeyTime更快/更慢的脈沖進行播放。如果您想要用力眨眼而不是脈動,請使用<DiscreteColorKeyFrame>而不是。<EasingColorKeyFrame>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/481270.html
