![](/img/trans.png)
[英]WPF TreeView how to add TreeViewItem control template for child elements of 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.