首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF,c# -customizing a textbox display属性和实现一个数据触发器

WPF,c# -customizing a textbox display属性和实现一个数据触发器
EN

Stack Overflow用户
提问于 2011-08-22 20:23:54
回答 2查看 551关注 0票数 2

如何自定义文本框显示属性(say..border、拐角半径等)并且还为要输入其中的数据实现数据触发器。或者如何自定义控件(比如textbox、listbox等)通过xaml一次查看并实现同一控件的数据触发器...

谁能帮我举个例子..

谢谢,Sekhar。

EN

回答 2

Stack Overflow用户

发布于 2011-08-22 20:42:12

首先,“显示属性”在WPF中通常被称为ControlTemplate。因此,您当然可以更改TextBox或其他控件的整个ControlTemplate,并随心所欲地对其进行修改。例如,您可以将按钮的ControlTemplate更改为仅显示矩形。

代码语言:javascript
复制
<ControlTemplate x:Key="myNewButton" TargetType="{x:Type Button}">
    <Rectangle Fill="{TemplateBinding Background}"/>
</ControlTemplate>


<Button Template="{StaticResource myNewButton}"/>

TemplateBinding标记是传递依赖属性的方法,在本例中是Background传递给ControlTemplate子代。

现在,如果您想添加数据触发器,可以在ControlTemplate本身中执行此操作

代码语言:javascript
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2011-08-22 20:39:57

您有多个选择。如果要完全自定义控件的可视元素,可以重写控件样式和模板。示例如下:http://msdn.microsoft.com/en-us/library/aa970773(v=VS.100).aspx

如果您想要执行简单的UI更改,例如,如果某些值为false,则使用红色边框,您可以使用对象的样式:

代码语言:javascript
复制
<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,则将其清除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7147407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档