ฉันมีปัญหาต่อไปนี้ เท่าที่ฉันใส่กล่องข้อความของฉันไว้ใน scrollviewer ValidationError Adorner ของฉันถูกตัดโดย ScrollViewer ฉันพบคำตอบสำหรับ Adorner และ ScrollViewer ซึ่งบอกว่าฉันต้องสร้าง scrollviewer ใหม่และเพิ่ม adornerdecorator แต่สิ่งนี้ไม่สมเหตุสมผลสำหรับฉันและก็ไม่ได้ช่วยอะไรเช่นกัน เท่าที่ฉันรู้ Validation Adorner ควรแสดงผลใน 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>