无法解析 datatrigger wpf 中的绑定
Cannot resolve binding in 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="{Binding DdaOptions.MyColor}"/>
用这条线
<SolidColorBrush Color="Red"/>
有效。使用调试 DdaOptions.MyColor 属性 已正确设置。
如何更改代码以解决此问题?
我尝试使用转换器而不是
<SolidColorBrush Color="{Binding DdaOptions.MyColor}"/>
但问题依旧。
属性 MyColor 的类型是 Color。
Dda 是 ViewModel,它实现了 INotifyPropertyChanged。
有什么想法吗?
更新
使用此代码
<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 是一个 Brush,我是这样设置的:
MyColor = new SolidColorBrush(Color.FromRgb(myColor.R, myColor.G, yColor.B));
如果 DdaOptions.MyColor 源 属性 returns 一个 画笔 你应该直接将前景 属性 设置为这个画笔:
<DataTrigger Binding="{Binding Highlighted}" Value="True">
<Setter Property="Foreground" Value="{Binding DdaOptions.MyColor}" />
</DataTrigger>
首先:
如果 DdaOptions.MyColor
是 SolidColorBrush
类型,那么使用这个:
<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
更改为正确的类型。
使用此代码:
<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="{Binding DdaOptions.MyColor}"/>
用这条线
<SolidColorBrush Color="Red"/>
有效。使用调试 DdaOptions.MyColor 属性 已正确设置。 如何更改代码以解决此问题? 我尝试使用转换器而不是
<SolidColorBrush Color="{Binding DdaOptions.MyColor}"/>
但问题依旧。 属性 MyColor 的类型是 Color。 Dda 是 ViewModel,它实现了 INotifyPropertyChanged。 有什么想法吗?
更新
使用此代码
<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 是一个 Brush,我是这样设置的:
MyColor = new SolidColorBrush(Color.FromRgb(myColor.R, myColor.G, yColor.B));
如果 DdaOptions.MyColor 源 属性 returns 一个 画笔 你应该直接将前景 属性 设置为这个画笔:
<DataTrigger Binding="{Binding Highlighted}" Value="True">
<Setter Property="Foreground" Value="{Binding DdaOptions.MyColor}" />
</DataTrigger>
首先:
如果 DdaOptions.MyColor
是 SolidColorBrush
类型,那么使用这个:
<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
更改为正确的类型。