我有一个带有控件模板的用户控件来显示验证错误,验证模板:
<ControlTemplate x:Key="TextBoxPropertyValidationTemplate">
<StackPanel>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder x:Name="MyAdorner" />
</Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" MaxHeight="16" MaxWidth="16"
Source="{Binding Source={StaticResource ValidationIcon}, Converter={StaticResource UriConverter}}"
Margin="1" RenderOptions.BitmapScalingMode="HighQuality"
VerticalAlignment="Center" HorizontalAlignment="Center" />
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left"
Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
TextWrapping="Wrap" Grid.Column="1" FontSize="10" Foreground="Red" />
</Grid>
</StackPanel>
</ControlTemplate>
我似乎无法绕过一个看起来像这样的令人恼火的问题:
我一直试图在用户控件上使用边距,在模板上还有一些Height = Auto等,但所有这些并没有真正帮助。任何人的想法?
如果这有助于主要用户控件(嵌套验证的那个)位于带有AdornerDecorator的TabItem中。
任何帮助表示感谢。
答案 0 :(得分:4)
我想这是因为您的错误消息在AdornerLayer
上,而且与您的控件没有参与相同的布局。 MSDN says“装饰者的渲染独立于装饰者所绑定的UIElement的渲染。”这就是为什么消息只是置于一切之上。
您可以将错误文本放入原始模板中,根据Validation.HasError
隐藏它并将其包含在布局过程中。
但是,如果发生验证错误,更改控件的布局可能不是最好的方法。您可以考虑在工具提示中提供其他信息。
答案 1 :(得分:1)
或者,您可以将错误消息TextBlock放在TextBox旁边,并将其Text属性绑定到TextBox的ErrorContent,而不是使用ControlTemplate。
public void checkuser(){
EditText player1 = (EditText)findViewById(R.id.editText2);
EditText player2 = (EditText)findViewById(R.id.editText);
EditText player3 = (EditText)findViewById(R.id.editText4);
EditText player4 = (EditText)findViewById(R.id.editText3);
String f = player1.getText().toString();
String f1 = player2.getText().toString();
String f2 = player3.getText().toString();
String f3 = player4.getText().toString();
if ((f.trim().equals("")) && (f1.trim().equals("")) && (f2.trim().equals("") && (f3.trim().equals("")))){
Intent i = new Intent(getApplicationContext(),Game_Launch_withoutplayer.class);
startActivity(i);
}
else{
Intent in = new Intent(getApplicationContext(),Game_Launch.class);
in.putExtra("player1", player1.getText().toString());
in.putExtra("player2", player2.getText().toString());
in.putExtra("player3", player3.getText().toString());
in.putExtra("player4", player4.getText().toString());
startActivity(in);
}
}