2011-07-08 24 views
2

このテンプレートのDockPanelバックグラウンドの背後に、検証されたコントロールのテキストボックスが隠されているのはなぜですか?validationTemplate内の非表示のAdornedElementPlaceholder

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

背景にはテキストボックスが表示されている「透明」に設定されていますが、内部(カーソルwon'tの変更)をクリックすることはできません - 私れる場合。

AdorendElementPlaceholderを隠さずにテンプレートの背景を設定するにはどうすればよいですか?

おかげで

+1

+1は数週間前に全く同じ問題を抱え、検索を断念しました。何らかの理由でバックグラウンドがtexboxに到達する前にカーソルを呑み込んでしまいます。私はz軸の設定などで手を加えてみましたが、解決策を見つけることができませんでした。 – stijn

答えて

3

adorner層が要素の上に座るんし、マウスの相互作用を遮断できるGPX。あなたのケースでは、DockPanelに背景を適用することによって、オブジェクトに "HitTestVisible"という領域があり、マウスのクリックを傍受することをWPFに示します。

「透過」はまだHitTestVisibleです。マウスクリックを傍受したくない場合は、バックグラウンドを「{x:Null}」に設定するか、空白のままにしてください。

つのオプション::

  1. 背景= "{ヌルX}" を設定します。これは基本的にバックグラウンドではなく、マウスのヒットテストを防ぎます。
  2. DockPanelでIsHitTestVisible = "False"を指定してください。これにより、マウス操作がそのレイヤーをバイパスし、次に使用可能なレイヤーに移動できるようになります。

EDIT:

ここでは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に設定するオプションは、実際にはオプションではありません。作成者が背景を望んでいるからです。 – stijn

+1

私はKaXamlで私のために働く例を含めるように私の答えを編集しました。これはあなたのテンプレートのアプローチを使用します。ただし、テキストボックスの背景色を変更することが主な目的である場合は、「Validation.HasError」添付プロパティに反応するテキストボックスにスタイルを設定すると、これを簡単に行うことができます。次に、あなたが望むようにテキストボックスをスタイルすることができます。私はそれもサンプルを追加します。 – NathanAW

+0

申し訳ありませんが、私の間違いは、IsEnabledがfalseに設定されているTextBoxで試していました。 IsHitTestVisible = "False"が機能します。 – stijn

関連する問題