【问题标题】:Show IDataErrorInfo errors in tooltip on keyboard focus and mouse over在键盘焦点和鼠标悬停的工具提示中显示 IDataErrorInfo 错误
【发布时间】:2016-07-28 11:21:02
【问题描述】:

我有一个TextBox,它使用这种样式通过ToolTip 显示IDataErrorInfo 验证信息:

<Style x:Key="EntityPropertyTextBoxErrorStyle" TargetType="{x:Type TextBox}"  
       BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <!-- this gets rid of all adornment INCLUDING THE DEFAULT RED BORDER -->
                <AdornedElementPlaceholder />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" 
                Value="{Binding RelativeSource={RelativeSource Self},
                Path=(Validation.Errors)[0].ErrorContent}"/>
            <Setter Property="Background" Value="MistyRose" />
        </Trigger>
    </Style.Triggers>
</Style>

现在我希望ToolTip 也显示在键盘焦点上。

【问题讨论】:

    标签: c# wpf focus tooltip idataerrorinfo


    【解决方案1】:

    我发现的最佳解决方案是使用Popup 而不是ToolTip

    <ControlTemplate x:Key="ErrorTemplate">
        <StackPanel>
            <AdornedElementPlaceholder x:Name="ControlWithError" />
            <Popup PlacementTarget="{Binding ElementName=ControlWithError}" Placement="Top">
                <Popup.IsOpen>
                    <MultiBinding Converter="{StaticResource AtLeastOneTrueConverter}">
                        <Binding Path="AdornedElement.IsMouseOver"
                                 ElementName="ControlWithError" Mode="OneWay" />
                        <Binding Path="AdornedElement.IsKeyboardFocusWithin"
                                 ElementName="ControlWithError" Mode="OneWay" />
                    </MultiBinding>
                </Popup.IsOpen>
                <Border BorderThickness="1">
                    <TextBlock Text="{Binding 
                                      AdornedElement.(Validation.Errors)[0].ErrorContent,
                                      ElementName=ControlWithError}"
                                Background="White" 
                                FontSize="8" />
                </Border>
            </Popup>
        </StackPanel>
    </ControlTemplate>
    <Style x:Key="EntityPropertyTextBoxErrorStyle" TargetType="{x:Type TextBox}"
           BasedOn="{StaticResource {x:Type TextBox}}">
        <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}" />
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="Background" Value="MistyRose" />
            </Trigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多