2016-12-16 104 views
0

使用此代碼datatrigger結合:無法解析WPF

<DataGrid 
    Grid.Row="1" 
    ItemsSource="{Binding DdaOptions.FilteredRecords.FilteredRecords}" 
    AutoGenerateColumns="False" 
    VerticalScrollBarVisibility="Auto" 
    GridLinesVisibility="None" 
    Background="{StaticResource White1}" 
    BorderThickness="1" 
    BorderBrush="{StaticResource White1}" 
    Style="{StaticResource Roboto10DataGrid}" 
    AreRowDetailsFrozen="True" 
    CanUserAddRows="False"> 
    <DataGrid.Columns> 
    <DataGridTextColumn Header="GuideNumber" Binding="{Binding GuideNumber}" /> 
    <DataGridTextColumn Header="PartNumber" Binding="{Binding PartNumber}" /> 
    <DataGridTextColumn Header="Options" Binding="{Binding Options}" /> 
    <DataGridTextColumn Header="Description" Binding="{Binding Description}" /> 
    <DataGridTextColumn Header="PartStock" Binding="{Binding PartStock}" /> 
    <DataGridTextColumn Header="InterventionType" Binding="{Binding InterventionType}" /> 
    </DataGrid.Columns> 
<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding IsInDda}" Value="True"> 
      <Setter Property="Foreground" Value="{StaticResource DarkAccent1}" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Highlighted}" Value="True"> 
      <Setter Property="Foreground"> 
      <Setter.Value> 
      <SolidColorBrush Color="{Binding DdaOptions.MyColor}"/> 
      </Setter.Value> 
      </Setter> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </DataGrid.RowStyle> 
</DataGrid> 

結合Color="{Binding DdaOptions.MyColor}"不起作用。如果我用這條線

<SolidColorBrush Color="Red"/> 

更換線

<SolidColorBrush Color="{Binding DdaOptions.MyColor}"/> 

它的工作原理。使用調試DdaOptions.MyColor屬性設置正確。 如何更改代碼以解決此問題? 我試着使用轉換器,而不是

<SolidColorBrush Color="{Binding DdaOptions.MyColor}"/> 

,但問題仍然存在。 屬性MyColor的類型是Color。 Dda是ViewModel,它實現INotifyPropertyChanged。 有什麼想法?

UPDATE

使用此代碼

<DataTrigger Binding="{Binding Highlighted}" Value="True"> 
    <Setter Property="Foreground" Value="{Binding DdaOptions.MyColor}"/> 
</DataTrigger> 

代替

<DataTrigger Binding="{Binding Highlighted}" Value="True"> 
    <Setter Property="Foreground"> 
     <Setter.Value> 
     <SolidColorBrush Color="{Binding DdaOptions.MyColor}"/> 
     </Setter.Value> 
    </Setter> 
    </DataTrigger> 

的顏色變化始終爲黑色。 MyColor是刷,我把它用這種方式:

MyColor = new SolidColorBrush(Color.FromRgb(myColor.R, myColor.G, yColor.B)); 
+1

代替這種<的SolidColorBrush顏色= 「{結合DdaOptions.MyColor}」/>, 嘗試這樣, <的SolidColorBrush顏色= 「{結合路徑=(DdaOptions.MyColor)}」/>如果這是AttachedProperty – WPFUser

+1

...什麼是'DdaOptions'? – AnjumSKhan

+0

DdaOptions是實現INotifyPropertyChanged的ViewModel – MartinaLabMath

回答

1

第一所有:

如果DdaOptions.MyColorSolidColorBrush類型,然後使用該命令:

<DataTrigger Binding="{Binding Highlighted}" Value="True"> 
    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=DataContext.DdaOptions.MyColor}"/> 
</DataTrigger> 

,或者如果Color型,則這樣的:

<DataTrigger Binding="{Binding Highlighted}" Value="True"> 
    <Setter Property="Foreground"> 
    <Setter.Value> 
     <SolidColorBrush Color="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=DataContext.DdaOptions.MyColor}"/> 
    </Setter.Value> 
    </Setter> 
</DataTrigger> 

,當然你必須改變AncestorType=Window爲正確的類型。

1

如果DdaOptions.MyColor源屬性返回你應該前景色屬性設置爲這個直接刷:

<DataTrigger Binding="{Binding Highlighted}" Value="True"> 
    <Setter Property="Foreground" Value="{Binding DdaOptions.MyColor}" /> 
</DataTrigger> 
+0

是的,我做到了,但顏色總是變黑。在調試中,我可以看到MyColor(MyColor = new SolidColorBrush(Color.FromRgb(myColor.R,myColor.G,myColor。B));)已正確設置,但我總是在UI上看到黑色 – MartinaLabMath

+1

使用不同的刷子:DdaOptions.MyColor = System.Windows.Media.Brushes.Yellow;根據您提供的信息,您無法真正期望任何人知道您希望顯示的確切顏色...... – mm8

+0

它仍然無法使用。我有一組按鈕和一個網格。每個按鈕都有自定義的背景顏色。當我點擊一個按鈕時,網格中行的前景應該相應地改變爲點擊按鈕的顏色。 – MartinaLabMath