Wpf 验证错误模板装饰器在ScrollViewer中被剪切
我有以下问题。只要我将文本框放入scrollviewer,我的ValidationError装饰程序就会被scrollviewer剪切。我找到了一些关于Adorner和ScrollViewer的答案,它们说我需要重新部署我的ScrollViewer并添加一个AdorneDecorator。但这对我来说毫无意义,也没有任何帮助。 据我所知,验证装饰器应该在最近的装饰器中呈现。默认情况下,ScrollViewer没有AdornerDecorator。有人知道为什么我的验证者被砍掉了吗 我也在寻找解决方案:) 编辑:似乎是来自ScrollViewer模板的ScrollContentPresenter导致了问题,因为默认情况下它有一个AdornerLayer。有什么办法解决我的问题吗 编辑2:Wpf 验证错误模板装饰器在ScrollViewer中被剪切,wpf,.net-4.0,scrollviewer,adorner,Wpf,.net 4.0,Scrollviewer,Adorner,我有以下问题。只要我将文本框放入scrollviewer,我的ValidationError装饰程序就会被scrollviewer剪切。我找到了一些关于Adorner和ScrollViewer的答案,它们说我需要重新部署我的ScrollViewer并添加一个AdorneDecorator。但这对我来说毫无意义,也没有任何帮助。 据我所知,验证装饰器应该在最近的装饰器中呈现。默认情况下,ScrollViewer没有AdornerDecorator。有人知道为什么我的验证者被砍掉了吗 我也在寻找解决
- 有没有办法在没有Adornerlayer的情况下创建新的ScrollConntentPresenter模板
- 或者有没有一种方法可以从VisualTree中删除Adornerlayer中的装饰
- 或者我可以强制Adornerlayer在“更高/最顶层”Adornerlayer中渲染吗
- 或者我可以在没有ScrollViewer的情况下使用滚动内容吗
<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>
该行为是故意的。ScrollViewer能够隐藏其部分内容(即位于范围中的内容)。为这样的内容显示一个不会被剪裁的装饰器,会导致一个奇怪的UI
您应该能够在ValidationTemplate中执行的操作是将
网格
元素放入弹出控件中。请尝试并报告它是否有效。只需移动窗口:)弹出窗口将保持不变,装饰器将随您一起移动。我同意,弹出窗口并不是解决此问题的真正方法!