/ / Como posso alterar a seleção em uma caixa de texto sem foco? - wpf, caixa de texto, seleção

Como posso alterar a seleção em uma caixa de texto sem foco? - wpf, caixa de texto, seleção

Eu vi essa pergunta:

Como manter a seleção WPF TextBox quando não está focado?

E implementei a solução lá, para que minha caixa de texto mostre a seleção, mesmo quando ela não tiver foco.

No entanto, quando altero o início da seleção oucomprimento, nada muda visualmente na caixa de texto. Além disso, quando rolar a caixa de texto de forma programática e ela não tiver foco, o pincel de seleção não se moverá com o texto enquanto ele rola.

Respostas:

1 para resposta № 1

Se você definir um escopo de foco separado em XAML paramantenha a seleção (consulte StackPanel abaixo) e defina o foco no TextBox uma vez (nesse caso, quando a janela abrir usando o FocusManager.FocusedElement), você deverá ver sua seleção mudar programaticamente.

Aqui está um exemplo de código para você começar:

<Window x:Class="RichTextFont2.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Main Window"
Height="400" Width="400"
FocusManager.FocusedElement="{Binding ElementName=myTextBox}"
FontSize="20">

<DockPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="60"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox x:Name="myTextBox"
Grid.Row="0"
Text="Text that does not loose selection."
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto">
</TextBox>
<StackPanel Grid.Row="1" FocusManager.IsFocusScope="True">
<Button Content="Select Text" Click="Button_Click_MoveTextBox"/>
</StackPanel>
</Grid>
</DockPanel>
</Window>

Aqui está um código para manipular o evento de clique no botão:

private void Button_Click_MoveTextBox(object sender, RoutedEventArgs e)
{
if (myTextBox.SelectionStart >= myTextBox.Text.Length)
{
myTextBox.SelectionStart = 0;
}
else
{
myTextBox.SelectionStart += 9;
}
myTextBox.SelectionLength = 6;
myTextBox.LineDown();
}