c# - 数据绑定(bind)到渐变停止时找不到可视化树元素

标签 c# wpf data-binding mvvm datatemplate

尝试创建一个 DataTemplate 样式,它应该根据 bool 值“IsReported”更改几个渐变停止点的颜色。这是一个 MVVM 项目。

但是,当我将项目添加到列表框绑定(bind)到的 ObservableCollection(在 View 模型中)时,出现此错误:

{"'在'System.Windows.Markup.StaticResourceHolder' 上提供值引发异常。'行号“153”和行位置“38”。”

找不到名为“timeSlotColorValue”的资源。资源名称区分大小写。

这是样式/数据模板:

       <LinearGradientBrush x:Key="bordBackground" EndPoint="1,1" StartPoint="0,0">
            <GradientStop x:Name="timeSlotColorValue" Color="Lime" Offset="0" />
            <GradientStop Color="Transparent" Offset="0.2"/>
            <GradientStop Color="Transparent" Offset="0.8"/>
            <GradientStop x:Name="timeSlotColorValue2" Color="Lime" Offset="1"/>
       </LinearGradientBrush>
       <Style TargetType="ListBox" x:Key="timeSlotTemplate">
            <Setter Property="ItemTemplate">
                <Setter.Value>
                    <DataTemplate DataType="model:DVRTimeSlot">
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsReported}" Value="true">
                                <Setter Property="GradientStop.Color" TargetName="{StaticResource timeSlotColorValue}" Value="Red" />
                                <Setter Property="GradientStop.Color" TargetName="{StaticResource timeSlotColorValue2}" Value="Red" />
                            </DataTrigger>
                        </DataTemplate.Triggers>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50" />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="{Binding TimeString}" Padding="2" FontSize="13" FontWeight="Black" >
                                <TextBlock.Background>
                                    <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0,1">
                                        <GradientStop Color="LightGray" Offset="0"/>
                                        <GradientStop Color="Azure" Offset="1"/>
                                    </LinearGradientBrush>
                                </TextBlock.Background>
                            </TextBlock>
                            <Border Grid.Column="1" Background="{StaticResource bordBackground}">
                                <Border.Resources>
                                    <Style TargetType="TextBlock">
                                        <Setter Property="TextAlignment" Value="Right" />
                                        <Setter Property="Padding" Value="5,0"/>
                                        <Setter Property="FontSize" Value="13"/>
                                        <Setter Property="FontWeight" Value="SemiBold" />
                                    </Style>
                                    <Style TargetType="Border">
                                        <Setter Property="Padding" Value="3" />
                                        <Setter Property="Margin" Value="-3,0,-3,0" />
                                        <Setter Property="MinWidth" Value="240"/>
                                    </Style>
                                </Border.Resources>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition />
                                        <ColumnDefinition />
                                    </Grid.ColumnDefinitions>
                                <TextBlock Grid.Column="0" Text="{Binding Reason}" TextAlignment="Center"/>
                                </Grid>
                            </Border>
                        </Grid>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>

这是我的数据基于的模型:

    public class DVRTimeSlot
    {
        public DVRTimeSlot()
        {

        }

        public bool IsReported { get; set; }

        public string Reason { get; set; }

        public CallReportCategory Category { get; set; }

        public DateTime TimeValue { get; set; }

        public string TimeString
        {
            get { return TimeValue.Hour + ":" + TimeValue.Minute; }
        }
    }

任何人都可以阐明这一点,我是否走错了路? 我将这篇文章用作指南:Change color of textbox with trigger , 但在这种情况下似乎不起作用

最佳答案

StaticResource 扩展将查找具有您指定为参数的 x:Key 的资源。在您发布的代码中,您只指定了一个 x:Name

关于c# - 数据绑定(bind)到渐变停止时找不到可视化树元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076216/

相关文章:

c# - 添加文本时如何防止多行文本框滚动?

c# - 如何计算 HttpWebRequest 花费的出站和入站互联网流量

c# - 为什么我的 WPF 项目中的数据上下文可以在代码隐藏中正常运行,但不能在 xaml 中正常运行?

wpf - 文本框到数字绑定(bind)

c# - 将列表转换为 json 格式 - 快速简便的方法

c# - 以编程方式从 Web 服务器 (HTTP/FTP) 下载文件的最佳且最安全的方法是什么?

c# - 在wpf应用程序中读取excel文件内容

c# - MVVM + WCF 异步回调

c# - DataGrid header 中的 WPF 数据绑定(bind)

css - 在 Vuetify 中动态更改工具栏的颜色