亲爱的stackoverflow人员,为什么我的文本框,这是我的验证控件,隐藏在此模板中的DockPanel背后?
<ControlTemplate x:Key="validationTemplate">
<DockPanel Background="Black">
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
如果背景设置为“透明”,则文本框可见,但我无法单击内部(光标不会更改)。
如何在不隐藏AdorendElementPlaceholder的情况下为我的模板设置背景?
谢谢gpx
答案 0 :(得分:3)
装饰层确实位于元素的顶部,可以拦截鼠标交互。在您的情况下,通过将背景应用于DockPanel,您向WPF指示该对象具有“HitTestVisible”区域并将拦截鼠标单击。
另一个令人困惑的注意事项是“透明”仍然是HitTestVisible。如果您不希望它拦截鼠标点击,那么您应该将背景设置为“{x:Null}”或将其留空。
两个选项:
修改强>
这是一个适用于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>