首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF - XAML -没有绑定的数据触发器/仅值触发器

WPF - XAML -没有绑定的数据触发器/仅值触发器
EN

Stack Overflow用户
提问于 2010-11-10 17:04:09
回答 2查看 2.8K关注 0票数 2

我在DataGrid中有一个值网格。在每个单元格中,我有4个值中的一个,我希望每个值都有一个关联的颜色。

在过去,我所有的数据触发器都是这样的格式;

代码语言:javascript
复制
<DataTrigger Binding="{Binding Status}" Value="R">
     <Setter Property="xcdg:DataRow.Background" Value="Pink" />
</DataTrigger>

但是我需要一些格式的东西;

代码语言:javascript
复制
<DataTrigger Binding="{Binding *}" Value="R">
     <Setter Property="xcdg:DataRow.Background" Value="Pink" />
</DataTrigger>

这样任何单元格的值都会被检查。我不能使用显式绑定的原因是列数和它们的名称是动态的,我使用扩展CustomTypeDescriptor来公开列和行以进入网格。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-11 00:06:17

代码语言:javascript
复制
<DataTrigger Binding="{Binding Path=Content, RelativeSource={x:Static RelativeSource.Self}}" Value="Failure">
    <Setter Property="xcdg:DataRow.Background" Value="Red" />
</DataTrigger>

我需要使用一个相对的资源。

更进一步,我最终使用的是;

代码语言:javascript
复制
        <xcdg:DataGridControl.Resources>
            <c:ColorConverter x:Key="colorConverter" />
            <Style TargetType="{x:Type xcdg:DataCell}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type xcdg:DataRow}}}" Value="False">
                        <Setter Property="xcdg:DataCell.Background" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource colorConverter}}" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=IsDirty, RelativeSource={RelativeSource AncestorType={x:Type xcdg:DataRow}}}" Value="True">
                        <Setter Property="xcdg:DataCell.Background" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource colorConverter}}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </xcdg:DataGridControl.Resources>

我的颜色转换器看起来有点像这样;

代码语言:javascript
复制
[ValueConversion(typeof(DataCell), typeof(Brush))]
public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var cell = (DataCell)value;
        var content = (string)cell.Content;

        if (content == null || cell.ParentRow.IsSelected)
        {
            return DependencyProperty.UnsetValue;
        }

        if (content == "Unknown")
        {
            return new SolidColorBrush(Colors.LightYellow);
        }

        ...

        return DependencyProperty.UnsetValue;
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return null;
    }
}

我现在唯一的问题是,当我滚动我的背景颜色时,当DataRows被重用时,我的背景颜色不会更新。

当DataRow被重用时,我也找不到可以挂接的事件...

票数 0
EN

Stack Overflow用户

发布于 2010-11-10 20:30:10

是否可以在绑定中使用ValueConverter?这样你就可以在转换器中检查它应该返回的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4142750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档