关于WPF数据绑定是什么,请参考Data Binding Overview:http://msdn.microsoft.com/en-us/library/ms752347.aspx
关于WPF数据绑定的Validation更多细节,请参考Data Validation in 3.5:http://blogs.msdn.com/wpfsdk/archive/2007/10/02/data-validation-in-3-5.aspx
关于WPF数据绑定的Validation中的ErrorTemplate怎么用,请参考ErrorTemplate Attached Property:http://msdn.microsoft.com/en-us/library/system.windows.controls.validation.errortemplate.aspx
ErrorTemplate将被绘制在Adorner Layer上,关于Adorner Layer,请参考Adorners Overview:http://msdn.microsoft.com/en-us/library/ms743737.aspx
在Adorners Overview里,对Adorner是这样解释的,
Adorners are rendered in an AdornerLayer, which is a rendering surface that is always on top of the adorned element or a collection of adorned elements.
Adorned element的红色是我加的。表面上看,这个adorned element就是一个element,但是这个element的范围有多大呢?对我们的程序会有什么影响呢?看文档很难想到。用过之后才知道,影响太大了。
还有这样一个不太起眼的Note。
Anything placed in the adorner layer is rendered on top of the rest of any styles you have set. In other words, adorners are always visually on top and cannot be overridden using z-order.
这句话是对的。大意就是说这个Adorner layer里的东西,总会被绘制在它所adorn的东西之上。这个无可厚非,人家这样设计,我们就这么用就是了。但是,问题就在于,一个Window里的东西,是可以有层次的,有区域,有可见性的。但是adorner layer不分青红皂白地总在最上。结果就出了问题。请看下面的例子。
DemoWindow
<Window x:Class="FixErrorTemplate.DemoWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Stubborn Error Template Demo" Height="200" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" Name="window"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="50"/> <RowDefinition Height="5"/> <RowDefinition/> </Grid.RowDefinitions> <Grid Height="50"> <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Width="100"> <TextBox.Text> <Binding ValidatesOnDataErrors="True" ElementName="window" Path="Value"/> </TextBox.Text> </TextBox> </Grid> <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch"/> <Grid Grid.Row="2" Margin="12"> <TabControl> <TabItem Header="Tab1"> <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Width="100"> <TextBox.Text> <Binding ValidatesOnDataErrors="True" ElementName="window" Path="Value"/> </TextBox.Text> </TextBox> </TabItem> <TabItem Header="Tab2"/> </TabControl> </Grid> </Grid></Window>
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索validation
, element
, microsoft
, wpf style template
, 关于
, Overview
参考
wpf controltemplate、wpf datatemplate、wpf template、wpf templatebinding、wpf style template,以便于您获取更多的相关知识。