у меня следующая проблема. насколько я помещаю свои текстовые поля в прокрутку, мой ValidationError Adorner обрезается ScrollViewer. я нашел несколько ответов на Adorner и ScrollViewer, в которых говорится, что мне нужно изменить шаблон моего прокрутки и добавить adornerdecorator. но это не имеет смысла для меня, и это также не помогает. насколько я знаю, должен ли Adorner Validation отображаться в ближайшем AdornerDecorator. ScrollViewer по умолчанию не имеет AdornerDecorator. так кто-нибудь знает, почему мой ValidationAdorner обрезается?
Я тоже ищу решение :)
РЕДАКТИРОВАТЬ: кажется, что ScrollContentPresenter, который исходит из шаблона ScrollViewer, вызывает проблему, потому что по умолчанию он имеет AdornerLayer. Любые идеи, как решить мою проблему?
РЕДАКТИРОВАТЬ2:
- есть ли способ создать новый шаблон ScrollConntentPresenter без Adornerlayer?
- или есть способ удалить Adornerlayer из VisualTree?
- или я могу заставить Adornerlayer отображать в «более высоком/самом верхнем» AdornerLayer?
- или я могу иметь прокручиваемый контент без ScrollViewer?
вот мой xaml:
<UserControl>
<AdornerDecorator>
<Grid x:Name="RootControl">
<Grid.RowDefinitions>
<RowDefinition Height="auto" MinHeight="50"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="main" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border x:Name="InputBorder" Grid.Column="0">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<Grid x:Name="InputContainer" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
...some rows...
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
...some columns...
</Grid.ColumnDefinitions>
<TextBox .../><!--this Validation Adorner get cut by scrollviewer-->
</Grid>
</ScrollViewer>
</Border>
</Grid>
</Grid>
</AdornerDecorator>
</UserControl>
вот мой шаблон проверки:
<ControlTemplate x:Key="ValidationTemplate" >
<DockPanel>
<AdornedElementPlaceholder Name="MyAdornedElement" />
<Grid>
<Border Background="{StaticResource BrushError}" Margin="3,0,0,0" x:Name="ErrorControl" BorderBrush="White" BorderThickness="1">
<TextBlock Margin="10,3,5,2"
Text="{Binding ElementName=MyAdornedElement,Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}"
Visibility="{Binding ElementName=MyAdornedElement,Path=AdornedElement.Visibility}"
Foreground="White" FontWeight="Bold">
</TextBlock>
</Border>
<Path x:Name="path" Margin="3,0,0,0" Data="M 0,10 L 10,0 " Fill="{StaticResource BrushError}"
StrokeThickness="2" Stroke="White"
/>
</Grid>
</DockPanel>
</ControlTemplate>