将 ErrorTemplate 添加到 MahApp 控件而不覆盖其默认样式
Add ErrorTemplate to a MahApp control without overwriting its default style
我正在使用 MahApps 并致力于实现文本框的验证。 MahApps 在 TextBoxes 中提供了一些不错的属性,如 Controls:TextBoxHelper.Watermark
和 Controls: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>
我正在使用 MahApps 并致力于实现文本框的验证。 MahApps 在 TextBoxes 中提供了一些不错的属性,如 Controls:TextBoxHelper.Watermark
和 Controls: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>