如何使工具提示具有圆角-WPF

时间:2018-07-31 10:29:56

标签: c# wpf xaml tooltip

我创建了一个小型WPF应用程序,并且页面上有许多TextBoxes。所有这些TextBox都有圆角。

我已使用MVVM模式并实现了IDataErrorInfo接口,以向用户显示错误。当其中一个文本框为空时,工具提示应该显示为红色,这是我成功完成的。

我现在希望红色边缘也具有圆角,例如TextBoxes。如图所示,红色边框显示为TextBox为空,红色边框必须具有拐角半径。

Red border shown here

<!-- Text box xaml code that is used to display the error and binding -->
    <TextBox Style="{StaticResource TextBoxBase}"
                             Name="FirstName"
                             Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Source={StaticResource CustomerObject}, ValidatesOnDataErrors=True}"/>


<!-- Code that changes the tool tip if it's null -->
<Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" />

            </Trigger>
        </Style.Triggers>

1 个答案:

答案 0 :(得分:0)

您可以为错误创建特定的工具提示样式:

下面是带有 CornerRadius =“ 4” 的自定义工具提示样式的示例:

<Style x:Key="ErrorRoundedTooltip" TargetType="ToolTip">
  <Setter Property="OverridesDefaultStyle" Value="true" />
  <Setter Property="HasDropShadow" Value="True" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ToolTip">
        <Border Name="Border" CornerRadius="4"
                BorderThickness="1"
                Width="{TemplateBinding Width}"
                Height="{TemplateBinding Height}">
          <ContentPresenter Margin="4" HorizontalAlignment="Left" VerticalAlignment="Top" />
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
  <Setter Property="Content">
       <Setter.Value>
            <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding ErrorContent.ValidationMessage}" VerticalAlignment="Center"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Setter.Value>
    </Setter>
</Style>

<ToolTip x:Key="ErrorRepository" Style="{StaticResource ErrorRoundedTooltip}" />

<Style TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{StaticResource ErrorRepository}" />
        </Trigger>
    </Style.Triggers>
</Style>