WPF圆角文本框(右侧有控件)

来源:互联网 时间:1970-01-01

实现效果:

 

圆角文本框可输入内容

 

点击了滑块后变成只读的文本框

最开始啊,是想做一个文本框,文本框里面右侧放一个按钮,清空,或者提交搜索用,也是研究了好久,才搞明白TextBox的模板功能。

刚才组哦了个圆角的TextBox,不过我右边放的是一个CheckBox,这个CheckBox参见我前几篇的一个滑块CheckBox的样式。

放这个复选框没什么大用处,我就顺便把这个复选框的IsChecked属性binding了TextBox的只读属性,通过这个复选框,可以更改文本框的只读和可写,虽然没有什么使用价值,但是里面涉及到了binding的东西,留着以后用到的时候当个示例吧。

234567891011121314
 <Style TargetType="{x:Type TextBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Border CornerRadius="10,10,10,10" BorderBrush="Silver" BorderThickness="1" Padding="5,0,5,0"> <DockPanel LastChildFill="True"> <CheckBox IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TextBox}},Path=IsReadOnly}" Style="{StaticResource CheckStyle}" DockPanel.Dock="Right"/> <ScrollViewer DockPanel.Dock="Left" x:Name="PART_ContentHost"/> </DockPanel> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>

这里说一下binding中的{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TextBox}},Path=IsReadOnly}

以下内容参考自MSDN:

RelativeSource 是标记扩展。 当要求转义特性值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于只在某些类型或属性上放置类型转换器而言,此要求更具有全局性。

RelativeSource Mode=FindAncestor,Mode有四个成员

PreviousData:允许您绑定所显示数据项列表中以前的数据项(不是包含数据项的控件)。

TemplatedParent:引用应用了模板(其中有数据绑定元素)的元素。 这类似于设置 TemplateBindingExtension,并仅当 Binding 在模板中时适用。

Self:引用您对其设置绑定的元素,并允许您将该元素的一个属性绑定到同一元素中的其他属性。

FindAncestor:引用数据绑定元素父链中的上级。 您可以使用它绑定到特定类型或其子类的上级。 如果您要指定 AncestorType 和/或 AncestorLevel,可以使用此模式。

AncestorType 获取或设置要查找的上级节点的类型。

如果未显式设置 Mode 属性,那么设置 AncestorType 或 AncestorLevel 属性将把 Mode 属性值隐式锁定为 FindAncestor。

Path 这个就是要绑定的属性了啊。。。

原文地址:http://www.luacloud.com/2011/06/20/wpf-%e6%b2%a1%e4%ba%8b%e5%81%9a%e4%ba%86%e4%b8%aa%e5%9c%86%e8%a7%92%e6%96%87%e6%9c%ac%e6%a1%86%ef%bc%8c%e5%b9%b6%e4%b8%94%e5%8f%b3%e4%be%a7%e6%9c%89%e6%8e%a7%e4%bb%b6/

相关阅读:
Top