Почему не доступен ввод в textbox?
В DataGrid переопределил шаблон ячейки добавив в него TextBox, у которого тоже переопределён шаблон. Один и тот же фрагмент кода, но в .Net Framework исправно работает, а в .Net Core - не работает ввод в TextBox. Отключил всё, что может повлиять - результат не меняется, если добавить новую ячейку и в переопределённый шаблон добавить TextBox из коробки, то работает. Как это поправить?
XAML:
<DataGridTemplateColumn Header="Список объектов"
Width="*"
HeaderStyle="{StaticResource CenterDataGridColumnsHeaders}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Character, UpdateSourceTrigger=PropertyChanged}"
BorderThickness="0"
TextAlignment="Center"
VerticalContentAlignment="Center"
Background="Transparent"
TextWrapping="Wrap">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="True">
<ScrollViewer x:Name="Part_ContentHost"
Focusable="False"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="White" TargetName="border"/>
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter Property="Background" Value="Transparent" TargetName="border"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Ответы (1 шт):
Автор решения: Genas
→ Ссылка
Как оказалось, нужно было переопределить шаблон ScrollViewer.
XAML:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Character, UpdateSourceTrigger=PropertyChanged}"
BorderThickness="0"
TextAlignment="Center"
VerticalContentAlignment="Center"
Background="Transparent"
TextWrapping="Wrap">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="True">
<ScrollViewer x:Name="PART_ContentHost"
Focusable="false"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden"
Background="{TemplateBinding Background}">
<ScrollViewer.ContentTemplate>
<DataTemplate>
<Grid Background="{Binding Background, ElementName=PART_ContentHost}" RenderOptions.ClearTypeHint="Enabled">
<ContentPresenter Content="{Binding Path=Content, ElementName=PART_ContentHost}"/>
</Grid>
</DataTemplate>
</ScrollViewer.ContentTemplate>
</ScrollViewer>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="White" TargetName="border"/>
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter Property="Background" Value="Transparent" TargetName="border"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>