我为标签设置了样式,如果基础 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! MasterViewCell
cell.cover.image = nil
if (indexPath.row == 2 && indexPath.section == 6) || (indexPath.row == 0 && indexPath.section == 0) {
cell.cover.isHidden = true
} else {
cell.cover.isHidden = false
cell.cover.image = UIImage(named: "2.png")
}
}
中提交的绑定值大于零,则应触发该样式:
DataTable
标签本身是通过这种方式设置的(资源字典中的DataTemplate):
<c:Groesser0BooleanValueConverter x:Key="G0" />
<Style x:Key="DashboardProzent" TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding Converter={StaticResource G0}}" Value="{x:Null}">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
转换器看起来像这样:
<Label Content="{Binding percentCol}" Style="{StaticResource DashboardPrzoent}" Grid.Row="0" Grid.Column="2"/>
如果运行一整件事,我会在Groesser0BooleanValueConverter类的public class Groesser0BooleanValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (System.Convert.ToInt32(value) > 0)
{
return true;
}
else
{
return false;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
方法中得到错误:
无法将类型为'System.Data.DataRowView'的对象转换为类型 'System.IConvertible'
如果我检查Converter的Convert方法的参数,则表明已传递Convert
,而不是我期望的percentCol字段的值。如何让Label传递值而不是整个行?
更新:
如果我将System.Data.DataRowView
设置为
Label
该错误仍然发生。如果我禁用触发器,则会显示该值(即使没有<Label Content="{Binding Path=percentCol}" Style="{StaticResource DashboardPrzoent}" Grid.Row="0" Grid.Column="2"/>
段也是如此。
我不想在样式段中声明字段名称,因为我想将其用于其他值。
答案 0 :(得分:0)
首先,我认为主要问题是由于您的Binding
中的DataTrigger
<DataTrigger Binding="{Binding Converter={StaticResource G0}}" Value="{x:Null}">
这会将DataContext
的直接Label
传递到Converter
,这显然不是您想要的。
您应该具有:
<DataTrigger Binding="{Binding Converter={StaticResource G0}, Path=percentCol}" Value="False">
我还纠正了Value
部分,因为您的“转换器”仅发送回True/False
。如果您想改回Value="{x:Null}"
,则必须修改您的转换器。
我也建议您在Converter
中更加安全,否则显式转换System.Convert.ToInt32(value)
可能(将...)引发错误。
答案 1 :(得分:0)
我想将if ( $instance['show_count_in_title'] ) {
printf( "<a href="me/notifications"><span class='notification-count-in-title'>(%d)</span></a>", $count );
}
和Binding Path
设置在两个不同的位置,例如Binding Converter
和DataTemplate
文件。
这可以通过在Style
中使用{Binding Content, RelativeSource={RelativeSource Self}, Converter={StaticResource converterName}}
并像往常一样在Style
中设置Binding Path
转换器
DataTemplate
DataTemplate
<Style x:Key="DashboardPrzoent" TargetType="{x:Type Label}">
...
<Style.Triggers>
<DataTrigger Binding="{Binding Content, RelativeSource={RelativeSource Self}, Converter={StaticResource G0}}" Value="True">
<Setter Property="Foreground" Value="{StaticResource Gruen}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Content, RelativeSource={RelativeSource Self}, Converter={StaticResource G0}}" Value="False">
<Setter Property="Foreground" Value="{StaticResource Rot}"/>
</DataTrigger>
</Style.Triggers>
</Style>