如何自定义文本框显示属性(例如..border,corner radius等..),并为要在其中输入的数据实现数据触发器。 要么 如何通过xaml自定义一个控件(比如文本框,列表框等)外观和实现同一控件的数据触发器......
任何人都可以帮我一个例子..
谢谢, Sekhar。
答案 0 :(得分:2)
首先,“显示属性”在WPF中通常称为ControlTemplate
。因此,您当然可以更改TextBox或其他控件的整个ControlTemplate,并以您喜欢的方式对其进行修改。例如,您可以将Button的ControlTemplate更改为仅显示一个Rectangle。
<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>
答案 1 :(得分:1)
您有多种选择。如果要完全自定义控件的可视元素,可以覆盖控件样式和模板。示例如下: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可用的错误模板的东西。本质上,它绑定到viewmodel中的布尔值,如果布尔值为false,则在文本框周围绘制红色边框,如果布尔值为true则清除它。