将 ErrorTemplate 添加到 MahApp 控件而不覆盖其默认样式

Add ErrorTemplate to a MahApp control without overwriting its default style

我正在使用 MahApps 并致力于实现文本框的验证。 MahApps 在 TextBoxes 中提供了一些不错的属性,如 Controls:TextBoxHelper.WatermarkControls:TextBoxHelper.ClearTextButton。我正在使用我的样式编写一个 ErrorTemplate,但我覆盖了 TextBox 的默认模板并丢失了那些 Metro 属性。如何在不丢失模板的情况下实现我的目标:

    <Style TargetType="TextBox">
        <Setter Property="Validation.ErrorTemplate" Value="{DynamicResource ErrorToolTipTemplate}" />
        <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> 

您应该定义新样式 based on existing 以保留其所有内容。我想如果是 MahApps,它将是 MetroTextBox:

<Style TargetType="TextBox" BasedOn="{StaticResource MetroTextBox}">
    <!-- your properties go here -->
</Style> 

BasedOn是成功的关键。但是,您可能不只在一个地方使用 MahApps 控件。因此,请尝试使您的样式更通用,并避免直接引用 BasedOn.

中的 MetroTextBox 资源

比较好看的XAML风格应该是这样的:

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    <!-- your properties go here -->
</Style>