我试图制作简单的登录表格卡,在里面我有TextBox作为用户名,PasswordBox作为密码。我添加了验证规则(如materialdesigninxaml的演示应用程序所示),但问题是验证消息与PasswordBox重叠。
我尝试过为所有TextBox元素添加底部填充,但这并没有帮助。只有我能想到的解决方案是添加顶部填充到底部元素,但我不喜欢这个解决方案,因为它扰乱了我的布局。
用户控制:
<materialDesign:Card Padding="32" Margin="16" MaxWidth="500">
<StackPanel>
<TextBox x:Name="UsernameTextBox" materialDesign:HintAssist.Hint="Username" MaxLength="20">
<TextBox.Text>
<Binding Path="Username" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<rules:NotEmptyValidationRule ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<PasswordBox x:Name="PasswordBox" materialDesign:HintAssist.Hint="Password" MaxLength="10" />
</StackPanel>
</materialDesign:Card>
ValidationRule:
public class NotEmptyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
return string.IsNullOrWhiteSpace((value ?? "").ToString())
? new ValidationResult(false, "Field is required.")
: ValidationResult.ValidResult;
}
}
本质上,我希望为这些验证消息保留空间,而不是在TextBox下面的元素上显示它们,只需对代码进行最少的修改(我不想手动向每个元素添加填充/边距)。
发布于 2019-07-15 14:13:53
您可以在您的Style
中创建一个全局App.xaml
,在其中给所有TextBoxes
提供一些底部空间:
<Style TargetType="TextBox" BasedOn="{StaticResource MaterialDesignTextBox}">
<Setter Property="Margin" Value="0,0,0,15" />
</Style>
发布于 2020-02-11 19:03:02
在选择弹出选项时,可以更改验证消息的位置。
<Style TargetType="TextBox" BasedOn="{StaticResource MaterialDesignTextBox}">
<Setter Property="materialDesign:ValidationAssist.UsePopup" Value="True" />
<Setter Property="materialDesign:ValidationAssist.PopupPlacement" Value="Center" />
</Style>
https://stackoverflow.com/questions/57026242
复制相似问题