2011-08-22 48 views
2

如何自定義文本框的顯示屬性(say..border,圓角半徑等),同時也可用於在它被輸入的數據datatrigger。 。 或者 如何自定義控制的(比如文本框,列表框等)的外觀和感覺,並通過XAML一次實現對於同一控制datatriggers ...WPF,C#-customizing一個文本框的顯示性能和實施datatrigger

可能有人幫我用一個例子..

謝謝, Sekhar。

回答

1

您有多個選項。如果您想完全自定義控件的可視元素,則可以覆蓋控件樣式和模板。示例如下:http://msdn.microsoft.com/en-us/library/aa970773(v=VS.100).aspx

如果你想進行簡單的用戶界面的變化,如紅色的邊框,如果某個值是假的,你使用對象的風格:

<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,則將其清除。

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標記是通過依賴屬性,在這種情況下BackgroundControlTemplate孩子的方式。

現在,如果你想添加的數據觸發,你可以做的是,在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> 
+0

這就是我在尋找......既爲控制實施的ControlTemplate和datatriggers一次.. –