Я хочу реализовать WPF CustomControl, который...
- Обычно выглядит как кнопка и отображает значение с плавающей запятой в виде строки
- При перетаскивании кнопки значением с плавающей запятой управляют как виртуальным ползунком.
- При нажатии кнопки она заменяется текстовым полем, предварительно заполненным текущим значением в виде строки. Этот текст можно редактировать. Если щелкнуть за пределами TextBox или нажать клавишу возврата, элемент управления снова изменится на Button, а отредактированный текст будет использоваться в качестве нового значения.
Нам нужен этот элемент управления в высоко оптимизированном интерфейсе. Хотя описание звучит немного странно, для нас оно работает на удивление хорошо. Но по соображениям производительности нам теперь нужно реорганизовать текущую реализацию как UserControl в CustomControl.
Я запустил ползунок элемента управления и смог показать TextBox, прикрепленный к Content DependencyProperty. Однако, к сожалению, мне не удается получить доступ к этому TextBox из ControlTemplate, который выглядит примерно так:
<Style TargetType="{x:Type local:FloatEditButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:FloatEditButton}">
<Grid Margin="0">
<Viewbox VerticalAlignment="Center" HorizontalAlignment="{Binding RelativeSource={RelativeSource TemplatedParent},Path=HorizontalContentAlignment}" Margin="0">
<ContentPresenter Name="content" Margin="2" VerticalAlignment="Center" />
</Viewbox>
<TextBox x:Name="XTextBox" Visibility="Collapsed" Text="{Binding Content}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="EditingAsTextBox" Value="True">
<Setter TargetName="XTextBox" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Любая идея, как это можно реализовать как CustomControl?