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

时间:2015-02-27 19:04:55

标签: c# wpf templates mvvm mahapps.metro

我正在使用MahApps并致力于实现TextBoxes的验证。 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> 

2 个答案:

答案 0 :(得分:3)

您应该定义新样式based on existing以保留其所有内容。我想在MahApps的情况下它将是MetroTextBox

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

答案 1 :(得分:1)

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

更好看的XAML风格会是这样的:

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