WPF: Пользовательский TextBox с кареткой и выделением - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю в WPF, C #.

Я хочу иметь текстовое поле, которое может обрабатывать другие элементы управления, а не только текст.Я уже добился определенного прогресса, но этого недостаточно.Проблема, с которой я сталкиваюсь, заключается в том, что в моем настраиваемом текстовом поле нет каретки и выделения.

У меня есть следующий стиль для настраиваемого текстового поля:

<Style x:Key="CustomTextBox" TargetType="{x:Type local:CustomTextBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomTextBox}">
                <Grid>
                    <ContentPresenter />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Возможно, из-за шаблона нет каретки и нет выбора . Есть ли способ их поддержки? Мне пришлось создать шаблон, чтобы я мог отображать другие элементы управления (TextBox принимает только текст), например, такой:

TextBox content

А вот как я использую пользовательское текстовое поле

    <local:CustomTextBox Grid.Row="0" Style="{StaticResource CustomTextBox}" Height="80" Focusable="True">
        <local:CustomTextBox.Content>
            <ContentControl Template="{StaticResource SquareRoot}">
                <ContentControl Template="{StaticResource SquareRoot}">
                    <ContentControl Template="{StaticResource SquareRoot}">
                        <ContentControl Template="{StaticResource SquareRoot}">
                            <ContentControl Template="{StaticResource SquareRoot}">
                                255551
                            </ContentControl>
                        </ContentControl>
                    </ContentControl>
                </ContentControl>
            </ContentControl>
        </local:CustomTextBox.Content>
    </local:CustomTextBox>

CustomTextBox class

[ContentProperty("Content")]
internal sealed class CustomTextBox : TextBox
{

    public FrameworkElement Content
    {
        get { return (FrameworkElement)GetValue(ContentProperty); }
        set { SetValue(ContentProperty, value); }
    }

    public static readonly DependencyProperty ContentProperty =
        DependencyProperty.Register("Content", typeof(FrameworkElement), typeof(CustomTextBox), new UIPropertyMetadata(null));
}

Я открыт длялюбые предложения.

...