首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF Bug 系列 (7):Validation ErrorTemplate 置於 AdornerLayer 導致元素隱藏後紅框殘留

     編輯:關於.NET

背景知識

  • ErrorTemplate 繪製於 AdornerLayer,永遠置頂於被裝飾元素之上
  • MSDN 註記:「AdornerLayer 內容總是視覺上置頂,無法用 Z-order 覆蓋」

重現場景

視窗上下由 GridSplitter 分割,上方與下方 TabControl 中的 TextBox 綁定同一驗證來源。輸入非法字元觸發驗證錯誤,紅框出現(圖2)。

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="50"/>
    <RowDefinition Height="5"/>
    <RowDefinition/>
  </Grid.RowDefinitions>
  <TextBox ... /> <!-- 上方 -->
  <GridSplitter Grid.Row="1" />
  <TabControl Grid.Row="2">
    <TabItem><TextBox ... /></TabItem> <!-- 下方 -->
  </TabControl>
</Grid>

異常現象

  1. 向上拖動 GridSplitter 使上方 TextBox 完全隱藏,**紅框仍殘留於可見區域**(圖3)
  2. 向下拖動壓縮下方 TabControl,**紅框縮成一線仍不消失**,甚至超出 TabControl 邊界(圖4)

原因分析

AdornerLayer 不感知元素的可見性與裁剪邊界,被裝飾元素隱藏或移出視野時,ErrorTemplate 仍保持原位繪製,導致視覺殘留。

結語

雖可透過自訂 Adorner 或驗證邏輯繞過,但預設行為違反直覺,屬於框架層面的設計缺陷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved