如何自定义文本框显示属性(say..border、拐角半径等)并且还为要输入其中的数据实现数据触发器。或者如何自定义控件(比如textbox、listbox等)通过xaml一次查看并实现同一控件的数据触发器...
谁能帮我举个例子..
谢谢,Sekhar。
发布于 2011-08-22 20:42:12
首先,“显示属性”在WPF中通常被称为ControlTemplate。因此,您当然可以更改TextBox或其他控件的整个ControlTemplate,并随心所欲地对其进行修改。例如,您可以将按钮的ControlTemplate更改为仅显示矩形。
<ControlTemplate x:Key="myNewButton" TargetType="{x:Type Button}">
<Rectangle Fill="{TemplateBinding Background}"/>
</ControlTemplate>
<Button Template="{StaticResource myNewButton}"/>TemplateBinding标记是传递依赖属性的方法,在本例中是Background传递给ControlTemplate子代。
现在,如果您想添加数据触发器,可以在ControlTemplate本身中执行此操作
<ControlTemplate x:Key="myNewButton" TargetType="{x:Type Button}">
<Rectangle x:Name="rect" Fill="{TemplateBinding Background}"/>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding MyDataProperty}" Value="True">
<Setter TargetElement="rect" Property="Fill" Value="Green" />
</DataTrigger
</ControlTemplate.Triggers>
</ControlTemplate>发布于 2011-08-22 20:39:57
您有多个选择。如果要完全自定义控件的可视元素,可以重写控件样式和模板。示例如下:http://msdn.microsoft.com/en-us/library/aa970773(v=VS.100).aspx。
如果您想要执行简单的UI更改,例如,如果某些值为false,则使用红色边框,您可以使用对象的样式:
<Style TargetType="{x:Type TextBox}">
<Setter Property="TextElement.FontFamily" Value="Calibri" />
<Setter Property="TextElement.FontSize" Value="14" />
<Setter Property="TextElement.Foreground" Value="Black" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsValid}" Value="False">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="5" Color="Red" ShadowDepth="0" />
</Setter.Value>
</Setter>
<Setter Property="ToolTip" Value="Something is invalid." />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsValid}" Value="True">
<Setter Property="Effect" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>上面的代码模仿了使用DataTrigger提供的错误模板。本质上,它绑定到视图模型中的布尔值,如果布尔值为false,则在文本框周围绘制红色边框,如果布尔值为true,则将其清除。
https://stackoverflow.com/questions/7147407
复制相似问题