2011-07-08 49 views
2

親愛的尊敬的人們,爲什麼我的文本框,這是我驗證的控件,隱藏在此模板中的DockPanel背景後面?隱藏AdornedElementPlaceholder驗證模板

<ControlTemplate x:Key="validationTemplate"> 
     <DockPanel Background="Black"> 
      <TextBlock Foreground="Red" FontSize="20">!</TextBlock> 
      <AdornedElementPlaceholder/> 
     </DockPanel> 
    </ControlTemplate> 

如果背景設置爲「透明」的文本框是可見的,但我可不是能夠點擊裏面(光標不需額外的變化)。

如何在不隱藏我的AdorendElementPlaceholder的情況下爲我的模板設置背景?

感謝GPX

+1

+1幾周前有完全相同的問題,放棄搜索。出於某種原因,背景會在光標到達texbox之前吞下光標。我試着擺弄z軸設置等,但無法找到解決方案。 – stijn

回答

3

裝飾器層不坐在元件的頂部,並且可以攔截鼠標交互。在你的情況下,通過對DockPanel應用背景,你向WPF表明該對象的區域是「HitTestVisible」,並且會攔截鼠標點擊。

另一個令人困惑的說法是「透明」仍然是HitTestVisible。如果您不想攔截鼠標點擊,則應將背景設置爲「{x:Null}」或將其保留爲空。

兩個選項:

  1. 設置背景= 「{x:NULL}」。這基本上沒有背景,並防止鼠標擊中測試。
  2. 指定DockPanel上的IsHitTestVisible =「False」。這將允許鼠標交互繞過該圖層並轉到下一個可用圖層。

編輯:

下面是在KaXaml對我工作的例子。只需在文本框中輸入類似「word」的字樣即可生成驗證錯誤。通過將背景顏色設置爲半透明顏色,我可以看到文本框。設置IsHitTestVisible =「False」允許我用鼠標點擊文本框。

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <ControlTemplate x:Key="validationTemplate"> 
     <DockPanel Background="#5000" IsHitTestVisible="False"> 
      <TextBlock Foreground="Red" FontSize="20">!</TextBlock> 
      <AdornedElementPlaceholder/> 
     </DockPanel> 
    </ControlTemplate> 
    <Style TargetType="TextBox" x:Key="validationStyle"> 
     <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="Background" Value="Green" /> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </Page.Resources> 
    <StackPanel Name="grd" Width="100" Height="100"> 
    <TextBox 
     VerticalAlignment="Top" 
     Validation.ErrorTemplate="{StaticResource validationTemplate}" 
     Text="{Binding ElementName=grd, Path=Width, Mode=TwoWay, ValidatesOnExceptions=True}" /> 
    <TextBox 
     VerticalAlignment="Top" 
     Text="{Binding ElementName=grd, Path=Height, Mode=TwoWay, ValidatesOnExceptions=True}" 
     Style="{StaticResource validationStyle}" 
     > 
    </TextBox> 
    </StackPanel> 
</Page> 
+0

我試過用IsHitTestVisible =「False」,不起作用。將Background設置爲null的選項並不是一個真正的選項,因爲作者想要一個colooured背景。 – stijn

+1

我編輯了我的答案,在KaXaml中包含一個適用於我的例子。這在你的模板中使用了這個方法。然而,我會注意到,如果你的主要目標是讓文本框的背景改變顏色,你可以通過在文本框上設置一個對「Validation.HasError」附加屬性作出反應的樣式來更輕鬆地完成此操作。然後,您可以根據需要設置文本框的樣式。我也會添加一個樣本。 – NathanAW

+0

對不起,我的錯誤是,我在一個TextBox上試圖將它的IsEnabled設置爲false。 IsHitTestVisible =「False」確實有效。 – stijn