AppContext.SetSwitch(“Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering”, false);不适用于 RichTextBox?

AppContext.SetSwitch("Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering", false); not work for RichTextBox?

提问人:wpf 提问时间:11/9/2023 更新时间:11/9/2023 访问量:40

问:

当我设置 AppContext.SetSwitch(“Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering”, false);TextBox 行为正常,RichTextBox 无法显示文本。造成这种结果的原因是什么?

XAML:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Label Content="TextBox" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="25"></Label>
        <TextBox Height="80" Width="500" Grid.Column="1" SelectionOpacity="1"></TextBox>

        <Label Content="RichTextBox" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="25"></Label>
        <RichTextBox Height="80" Width="500" Grid.Row="1" Grid.Column="1" SelectionOpacity="1" Style="{StaticResource RichTextBoxStyle}"></RichTextBox>
       
    </Grid>

.净6:

代号:

 public MainWindow()
        {
            AppContext.SetSwitch("Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering", false);
            InitializeComponent();
           
        }

.NET 框架 4.8

App.config:

        <runtime>
            <AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
        </runtime>

是否可以在不更改 xaml 代码的情况下使 RichTextBox 的结果与 TextBox 的结果相同?

结果:enter image description here

C# WPF RichTextBox

评论


答:

0赞 mm8 11/9/2023 #1

造成这种结果的原因是什么?

该开关仅适用于文档中所述的事实。TextBoxPasswordBox

是否可以在不更改 xaml 代码的情况下使 RichTextBox 的结果与 TextBox 的结果相同?

至少不使用这个或任何其他开关。如果不想接触 XAML 标记,请以编程方式设置?如果可以在代码隐藏中调用该方法,则还可以设置控件的属性。SelectionOpacityAppContext.SetSwitch

评论

0赞 wpf 11/13/2023
嗨,@mm8。我首先想验证是否确实没有办法实现这一点,同时仍然保持 SelectionOpacity=“1” 并在 RichTextBox 中有一个可见的文本?根据您的回答,我知道我不能使用 UseAdornerForTextboxSelectionRendering 开关或任何其他开关来实现这一点。是否有其他方法可以实现 RichTextBox 的此行为?也许,可以使用我自己的派生类扩展 RichTextBox,并覆盖某些方法或默认行为?如果这确实不受支持,我将不得不按照您的建议妥协并降低不透明度。
0赞 mm8 11/15/2023
我不认为有一种简单的方法可以在派生类中“覆盖”这种行为。以编程方式降低不透明度是解决问题的最简单方法。