我有以下问题 . 到目前为止,我将我的文本框放在滚动查看器中,我的ValidationError Adorner被ScrollViewer剪切掉了 . 我找到了Adorner和ScrollViewer的一些答案,我说我需要重新模拟我的scrollviewer并添加一个adornerdecorator . 但这对我来说毫无意义,也没有任何帮助 . 据我所知,Validation Adorner应该在最近的AdornerDecorator中呈现 . 默认情况下,ScrollViewer没有AdornerDecorator . 所以有人知道为什么我的ValidationAdorner被削减了吗?
我也在寻找解决方案:)
编辑:似乎来自ScrollViewer模板的ScrollContentPresenter导致问题,因为默认情况下它有一个AdornerLayer . 任何想法如何解决我的问题?
EDIT2:
-
有没有办法在没有Adornerlayer的情况下创建新的ScrollConntentPresenter模板?
-
或者有没有办法从VisualTree中删除Adornerlayer?
-
或者我可以强制Adornerlayer在" higher/most top" 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>
1 回答
这个行为是有目的的 . ScrollViewer能够隐藏其中的一些内容(即位于范围内的内容) . 显示不会被剪裁的此类内容的装饰器会导致奇怪的UI .
您应该在ValidationTemplate中执行的操作是将
Grid
元素放在Popup
控件中 . 请尝试并报告是否有效 .