2012-11-27 87 views
0

我是xaml的新手,我的代碼如下,我的問題是如何從c#代碼中調用InvalidForeground來更改複選框文本的顏色?讓xaml datatrigger在c#中工作代碼

<ControlTemplate x:Key="ItemTemplate" 
           TargetType="ListViewItem"> 
        <StackPanel Orientation="Horizontal">      
         <CheckBox x:Name="CkBoxVisual"> 
          <CheckBox.IsChecked> 
           <Binding Path="IsSelected" 
             Mode="TwoWay"> 
            <Binding.RelativeSource> 
             <RelativeSource Mode="TemplatedParent" /> 
            </Binding.RelativeSource> 
           </Binding>         
          </CheckBox.IsChecked> 
          <DataTrigger Binding="{Binding InvalidForeground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" Value="true"> 
           <Setter TargetName="CkBoxVisual" Property="Foreground" Value="Red"/> 
          </DataTrigger>      
         </CheckBox>      
         <ContentPresenter />      
        </StackPanel> 
       </ControlTemplate> 

回答

0

在你的代碼中,你沒有調用任何東西。其中,你希望依賴屬性的變化..

但是一個類型的窗口控件沒有名稱爲「InvalidForeground」的依賴項屬性。 這個觸發器永遠不會被觸發。 你的目標是什麼?改變財產或被通知改變(觸發)?


編輯:有一些規則你必須遵循:

1)從DataTrigger(的RelativeSource在綁定屬性所引用的控制):

Binding="{Binding Path=InvalidForeground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" 

必須有相關性名爲「InvalidForeground」的屬性在此基礎上正常工作將不起作用:

{x:Type Window} 

它的類型必須聲明,將工作,例如:

{x:Type my:ControlName} 

2)財產由觸發器或DataTrigger改變永遠不能明確指出,例如。將不起作用:

<TextBlock Text="{Binding Any}" Foreground="#FFCCCCCC"> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabItem, Mode=FindAncestor}, Path=IsSelected}" Value="True"> 
        <Setter Property="Foreground" Value="Black"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

將工作:

<TextBlock Text="{Binding Any}"> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="#FFCCCCCC"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabItem, Mode=FindAncestor}, Path=IsSelected}" Value="True"> 
        <Setter Property="Foreground" Value="Black"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

3)檢查使用它們有一些特殊性的RelativeSource綁定的操作(你應該知道一些關於WPF的可視化樹)。
http://msdn.microsoft.com/en-us/library/ms743599.aspx

4)您應檢查結合工作正常並且可以按照下列步驟操作: http://www.codeproject.com/Articles/244107/Debugging-WPF-data-bindings

+0

我的目標是改變前景屬性。 – NoviceMe

+0

我更新了我的答案,希望它對你有所幫助。 –

+0

我試過上面的代碼,但得到錯誤:'Style'在'TextBlock'類型中找不到。 – NoviceMe