簡體   English   中英

TreeView復選框中的Validation.Template不遵循TreeViewItem

[英]Validation.Template in Checkbox in TreeView does not follow TreeViewItem

我已經研究了許多問題和解決方案,這些問題和解決方案與邊界不隨元素一起移動,但是沒有一種解決方案對我有用。

這是屏幕截圖:

有問題的驗證

我有一個用於驗證的基本模板:

    <ControlTemplate x:Key="ErrorTemplate">
        <Grid Loaded="ErrorTemplateLoaded">
            <Border x:Name="errorBorder" DockPanel.Dock="Top" BorderBrush="Orange" BorderThickness="1"/>
            <AdornedElementPlaceholder x:Name="placeholder"/>
            <Popup AllowsTransparency="True" Placement="Right"
                       PlacementTarget="{Binding ElementName=errorBorder}"
                       IsOpen="{Binding ElementName=placeholder, Path=AdornedElement.IsFocused, Mode=OneWay}">
                <StackPanel Orientation="Horizontal">
                    <Polygon  VerticalAlignment="Center" Points="0,4 4,0 4,8" Fill="#FFE4B3" Stretch="Fill" Stroke="#FFE4B3"
                                  StrokeThickness="2" />
                    <Border Background="#FFE4B3" CornerRadius="4" Padding="4">
                        <TextBlock HorizontalAlignment="Center" Foreground="Black" FontWeight="Bold" Margin="2,0,0,0"
                                   Text="{Binding ElementName=placeholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent, Mode=OneWay}" />
                    </Border>
                </StackPanel>
            </Popup>
        </Grid>
    </ControlTemplate>

通過Styles它可以應用於我需要應用於的每個元素:

    <Style TargetType="CheckBox" BasedOn="{StaticResource DisableWhileLoadingProjectStyle}">
        <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}" />
    </Style>

這意味着它也被應用到TreeView內的Checkboxes中,這很好,但是當我在TreeView中滾動時,就會出現混亂。

滾動后,邊框似乎沒有更新。 僅在下一次滾動之后,邊框才會使用復選框的最后位置進行更新。 這意味着它不與當前位置同步。

我嘗試在代碼隱藏中找到ScrollViewer,並使用ScrollChanged事件更新了邊框位置,但這沒有幫助。 我的猜測是所有事件都在元素的滾動位置之前而不是滾動之后。

我怎么解決這個問題?

您在這里面臨的問題與此SO上的帖子類似。
解決該問題的方法是將CheckBox包裝在一個AdornerDecorator元素中,該元素已解決了該問題。
我希望我可以解釋,為什么出現這種情況,所有我能想到的是,AdorenerDecorator有額外的邏輯來處理ErrorTemplates連接到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM