Я заметил, что TextBox-ы очень медленные и создают проблемы с производительностью, когда Text
динамически изменяется кодом (мне нужно непрерывно изменять Text
на 10-15 TextBox одновременно), так чтоВ качестве обходного пути я создал пользовательский элемент управления с TextBlock
и TextBox
:
TextBlock
используется почти все время.
Используется TextBox
только , когда мне нужно отредактировать Text
внутри элемента управления с помощью клавиатуры.
Мое решение состоит в том, чтобы изменить шаблон и использовать TextBox, когда элемент управления сфокусирован:
(Value
является string
свойством зависимости)
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Value" Value="Val"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{TemplateBinding Value}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<TextBox HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
Text="{Binding Path=Value, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
Но когда я нажимаю на элемент управления, ничего не происходит.
Я думаю, что проблема в том, что «состояние фокуса» передается во внутренний TextBox, а элемент управления теряет «состояние фокуса».
Есть лучший способ создать собственный элемент управления «TextBox», подобный этому, или способ решить эту проблему?