Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2012年03月20日]

めんどい

2012年03月20日 22:49更新 筆者:K.Ktouth

Validation.ValidationAdornerSite 添付依存関係プロパティを使ってテキストボックスなどだけじゃなくセル全体の表示を切り替えたいとした時。ぶっちゃけエラー状態を取得するだけで面倒な事態になったので自分メモ。
なに、このひたすら面倒なバインディングパスの指定方法げー

一応これで上手いこと動くようにはなったし、セル全体に薄いピンクのオーバーラップも出来るようになったけど。セル全体にツールチップが出るようになったわけじゃないのが困りもの。
つまり ContentControl.Content 依存関係プロパティの内部がセル全体を埋めない、空白の部分がある場合は、その空白部分にカーソルを持って行ってもツールチップがポップアップしてくれない。全体を埋めるオーバーラップのヒットテストをオンにするとコンテンツにフォーカスが移らなくなるので駄目。要素の並びや ZIndex をいじっても AdornedElementPlaceholder の背面にセルを持って行く方法が見つからないので、エラーテンプレート側ではなく標準テンプレート側であらかじめ ContentPresenter の背後に背景用のパネルを配置しておく必要がある模様。そしてそっちのスタイル切り替えも かなり面倒な指定になりそうな予感げー
今日は時間がないので残りはまた明日以降だな…… orz

<Style x:Key="ColumnContent" TargetType="ContentControl">
 <Setter Property="Validation.ErrorTemplate">
  <Setter.Value>
   <ControlTemplate>
    <Border BorderBrush="Red" BorderThickness="0,0,0,2" CornerRadius="0">
     <StackPanel>
      <Grid ToolTip="{Binding Path=AdornedElement.(Validation.ValidationAdornerSiteFor).(Validation.Errors)[0].ErrorContent, ElementName=adorner}">
       <Grid Background="Pink" Opacity="0.25" IsHitTestVisible="False" />
       <AdornedElementPlaceholder x:Name="adorner" Margin="0,0,20,0" />
       <Image x:Name="icon"
         Width="18" Height="18" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,1,0"
         Source="/NewsPaper2012.Maintenance;component/Resources/warning.png" />
      </Grid>
     </StackPanel>
    </Border>
   </ControlTemplate>
  </Setter.Value>
 </Setter>
</Style>

本日のリンク元
その他のリンク元
検索