2011-10-25 60 views
0
<Window x:Class="AiweeeTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.Resources> 
      <SolidColorBrush x:Key="backcolorType" Color="Red"></SolidColorBrush> 
      <SolidColorBrush x:Key="forecolorType" Color="Green"></SolidColorBrush> 
      <Style x:Key="TextboxStyle" TargetType="{x:Type TextBox}"> 
       <Setter Property="Background" Value="Yellow"/> 
       <Style.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Background" Value="{StaticResource backcolorType}"/> 
         <Setter Property="Foreground" Value="{StaticResource forecolorType}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Grid.Resources> 
     <TextBox Name="textbox1" Width="100" Height="25" Style="{StaticResource TextboxStyle}" IsEnabled="False"/> 
    </Grid> 
</Window> 

我無法更新使用上面定義觸發一個文本框的背景,但是當我複製整個文本框控件模板的模板和替換「DisabledBackgroundBrush」與我自己的顏色。有什麼區別,我已經看到了這個問題上的一些聯繫;但是我無法理解它背後的原因。據我瞭解,觸發器按照它們定義的順序被觸發,然後在窗口中本地定義的觸發器應該能夠在禁用時覆蓋文本框的背景顏色。請澄清。 PS:我不想在這裏獲得任何特別的東西,但只是想明白爲什麼這樣。這讓我對WPF不直觀的情況感到沮喪。文本框殘疾人背景,而不使用模板

回答

0

我猜測它與WPF將爲DependencyProperty應用值的順序有關。 This MSDN article對依賴項屬性優先

一些好的信息基本上順序雲:

  1. 房產系統強制
  2. 活動的動畫,或保持行爲的動畫。
  3. 本地值
  4. TemplatedParent模板屬性從TemplatedParent模板
  5. 觸發器
  6. 屬性集(通常通過XAML屬性)在TemplatedParent模板
  7. 隱式的
  8. 風格觸發
  9. 模板觸發器
  10. 風格制定者
  11. 默認(主題)風格
  12. 在主題風格
  13. 二傳手在主題風格
  14. 繼承
  15. 從依賴屬性的元數據
  16. 默認值
+1

因此,要主動觸發總結;如果在基本控件的模板中已經應用了觸發器(例如,已經在文本框控件模板中應用了IsEnabled的觸發器以將其變爲灰色)......則在所有這些場景中,我們需要創建自己的模板來覆蓋觸發器的行爲?這不是讓我們回到石器時代(窗口控制),我們必須從scrath創建一個控制來實現這樣的事情嗎?我同意WPF帶來了根本性的變化,我們可以用控制來做事情......但是對我而言,這樣的事情看起來像缺失的差距?或者,我完全搞錯了? –

+0

不過謝謝! –