wpf - 文本框验证工具提示未出现

标签 wpf validation xaml textbox tooltip

我有以下文本框样式:

<Style x:Key="RenamingTextBox" TargetType="{x:Type TextBox}">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Grid>
                            <TextBlock x:Name="block" Visibility="Visible" Text="{TemplateBinding Text}" Margin="0"/>
                            <TextBox x:Name="box" Visibility="Collapsed" 
                                     Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                     Margin="1.25"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsRenaming}" Value="true">
                                <DataTrigger.Setters>
                                    <Setter TargetName="block" Property="TextBox.Visibility" Value="Collapsed" />
                                    <Setter TargetName="box" Property="TextBox.Visibility" Value="Visible" />
                                    <Setter TargetName="box" Property="FocusManager.FocusedElement" Value="{Binding ElementName=box}" />
                                    <Setter TargetName="box" Property="behaviors:TextBoxBehavior.SelectAll" Value="True"/>
                                </DataTrigger.Setters>
                            </DataTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>

还有:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Margin" Value="5" />
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="BorderBrush" Value="LightGray" />
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" 
                    Value="{Binding RelativeSource={RelativeSource Self},
                    Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

重命名文本框效果很好,它可以毫无问题地从 TextBox 来回更改为 TextBlock。当我的名字有错误时,它甚至会出现漂亮的红色边框。问题是当我将鼠标悬停在出现错误的文本框上时,工具提示不会显示。我项目中的所有其他文本框都工作正常。有什么想法吗?

最佳答案

重命名文本框不会接收第二个样式,因为它无法获取多种样式。

只需在重命名文本框样式中包含“默认”文本框样式,并使用 BasedOn 属性即可:

<Style TargetType="{x:Type TextBox}">
  ...
</Style>

<Style x:Key="RenamingTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
  ...
</Style>

关于wpf - 文本框验证工具提示未出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300652/

相关文章:

java - 当按下的键不是数字时,如何正确使用此事件?

c# - 使用 ControlTemplate 覆盖 XAML WPF 中的按钮不显示内容

c# - WPF图像源来自常量

java - 如何验证 Spring Data 填充的 Controller 输入中的域对象?

JavaScript 正则表达式接受 00.01 到 999.99999 之间的值

c# - 我怎样才能实现这种 StackPanel 和 UniformGrid 行为的混合?

c# - 如何在 WPF 4 中创建翻转控件?

wpf - 如何监控 WPF 应用程序中是否有用户交互?

.net - 在 .NET (WPF) 应用程序中集成 Qt 小部件

c# - 确定 WPF 元素类型