2017-08-02 8 views
1

要素で移動しない境界に関する多くの問題と解決策を見てきましたが、解決策はありませんでした。ここでTreeViewのチェックボックスのValidation.TemplateはTreeViewItemをフォローしません

はスクリーンショットです:

problematic validation

私は検証のための基本的なテンプレートがあります。

:これは、私はそれが適用される必要があるすべての要素に適用されます Stylesを通じて

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

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

これは、 lsoはツリービュー内のチェックボックスに適用されますが、ツリービュー内でスクロールすると混乱が生じます。

スクロール後にボーダーが更新されていないようです。次のスクロールの後でのみ、ボーダーはチェックボックスの最後の位置で更新されます。これは、現在の位置と同期されていないことを意味します。

コードビハインドでScrollViewerを見つけようとしましたが、ScrollChangedイベントを使用して境界位置を更新しましたが、それは役に立たなかったです。 私の推測では、すべてのイベントは要素のスクロール前の位置を取得し、スクロール後は取得しません。

どうすればこの問題を解決できますか?

+0

あなたの 'TreeViewItem'テンプレートXAMLはどこからでも見ることができませんが、[このSO投稿](https://stackoverflow.com/a/10295861/2029607)を見てください。 'TreeViewItem'を' AdornerDecorator'にラップする必要があると主張しています。しかし、もう一度やっているかもしれません。 – XAMlMAX

+0

@ XAMlMAX 'TreeView'を構築するために、さまざまな' DataTemplates'と 'HierarchicalDataTemplate'を使用しているので、私は' TreeViewItem'テンプレートを持っていません。私は 'AdornedDecorator'でチェックボックスをラップしようとしましたが、リーフを開くときにはうまくなりましたが、スクロールするときにも問題は発生します。 – RedX

+1

@ XAMlMAXあなたのコメントを回答として追加すると、私はそれを受け入れます。それはうまくいった。私は 'AdornedDecorator'で使われるすべての' DataTemplate'をラップする必要がありました。 – RedX

答えて

0

あなたがここに直面していることは、this post on SOと同様の問題です。
問題を解決したAdornerDecorator要素にCheckBoxをラップすることでした。
私はこれがなぜ起こるのか説明できると思いますが、AdorenerDecoratorにはErrorTemplatesを処理するロジックが追加されていると思います。

関連する問題