Penghias Template Kesalahan Validasi memotong wawasan ScrollViewer

saya memiliki masalah berikut. sejauh saya meletakkan Kotak Teks saya di scrollviewer, ValidationError Adorner saya terpotong oleh ScrollViewer. saya menemukan beberapa jawaban untuk Adorner dan ScrollViewer yang mengatakan saya perlu merombak ulang scrollviewer saya dan menambahkan penghias penghias. tapi ini tidak masuk akal bagiku dan juga tidak membantu. sejauh yang saya tahu apakah Validasi Adorner harus diberikan di AdornerDecorator terdekat. ScrollViewer secara default tidak memiliki AdornerDecorator. jadi adakah yang tahu mengapa ValidationAdorner saya terpotong?

Saya juga mencari solusi :)

EDIT: sepertinya ScrollContentPresenter yang berasal dari Template ScrollViewer menyebabkan masalah, karena memiliki AdornerLayer secara default. Ada ide bagaimana mengatasi masalah saya?

EDIT2:

  • apakah ada cara untuk membuat Template ScrollConntentPresenter baru tanpa Adornerlayer?
  • atau adakah cara untuk menghapus Adornerlayer dari VisualTree?
  • atau bisakah saya memaksa Adornerlayer untuk merender dalam AdornerLayer yang "lebih tinggi/paling atas"?
  • atau bisakah saya memiliki Konten Bergulir tanpa ScrollViewer?

ini xaml saya:

<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>

inilah Templat Validasi saya:

<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>

person blindmeis    schedule 21.04.2011    source sumber


Jawaban (1)


perilaku tersebut dimaksudkan. ScrollViewer dapat menyembunyikan sebagian isinya (yaitu konten yang berada dalam jangkauannya). Menampilkan Adorner untuk konten yang tidak terpotong, menghasilkan UI yang aneh.

Apa yang seharusnya dapat Anda lakukan di ValidationTemplate adalah menempatkan elemen Grid di dalam kontrol Popup. Silakan mencobanya dan laporkan jika berhasil.

person Markus Hütter    schedule 22.04.2011
comment
cukup pindahkan jendelanya :) popup tetap ada dan penghiasnya bergerak bersama Anda. - person blindmeis; 31.07.2013
comment
Saya setuju, popup bukanlah solusi untuk itu! - person OliverAssad; 25.06.2015