Silverlight DataGrid 行颜色绑定

2023-12-12

我想找到一种方法将 DataGrid 行的背景颜色绑定到绑定对象的属性。

这是我的 XAML:

<sdk:DataGrid ItemsSource="{Binding MyItems}" />

我正在将 MVVM Light Toolkit 与 Silverlight 4 结合使用。


您可以通过更改行模板来做到这一点:

<sdk:DataGrid ItemsSource="{Binding MyItems}">
    <sdk:DataGrid.RowStyle>
        <Style TargetType="sdk:DataGridRow">
            <Setter Property="Template">
            ...
                <Rectangle x:Name="BackgroundRectangle" Fill="{Binding ColorPropertyOfItem}" />
            ...
            </Setter>
        </Style>
    </sdk:DataGrid.RowStyle>
</sdk:DataGrid>

或者,您可以将每列标记为 TemplateColumn 并在每列中显式设置背景颜色:

<sdk:DataGridTemplateColumn Header="ColumnName" SortMemberPath="ColumnProperty">
    <sdk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding ColumnProperty}" Background="{Binding ColorPropertyOfItem}" />
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>

这是一个完整的模板DataGridRow class:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="local:DataGridRow" 
             xmlns:localprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
             xmlns:local="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
             xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">
            <localprimitives:DataGridFrozenGrid Name="Root">
                <vsm:VisualStateManager.VisualStateGroups>
                    <vsm:VisualStateGroup x:Name="CommonStates">
                        <vsm:VisualState x:Name="Normal"/>
                    <vsm:VisualState x:Name="NormalAlternatingRow">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="0"/>
                            </Storyboard>
                        </vsm:VisualState>
                        <vsm:VisualState x:Name="MouseOver">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To=".5"/>
                            </Storyboard>
                        </vsm:VisualState>
                        <vsm:VisualState x:Name="NormalSelected">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
                            </Storyboard>
                        </vsm:VisualState>
                        <vsm:VisualState x:Name="MouseOverSelected">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
                            </Storyboard>
                        </vsm:VisualState>
                        <vsm:VisualState x:Name="UnfocusedSelected">
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
                                <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FFE1E7EC"/>
                            </Storyboard>
                        </vsm:VisualState>
                    </vsm:VisualStateGroup>
                    <vsm:VisualStateGroup x:Name="ValidationStates">
                        <vsm:VisualState x:Name="Valid"/>
                        <vsm:VisualState x:Name="Invalid">
                            <Storyboard>
                                <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Visibility">
                                    <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
                                </ObjectAnimationUsingKeyFrames>
                                <DoubleAnimation Storyboard.TargetName="InvalidVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
                            </Storyboard>
                        </vsm:VisualState>
                    </vsm:VisualStateGroup>
                </vsm:VisualStateManager.VisualStateGroups>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>

                <Grid.Resources>
                    <Storyboard x:Key="DetailsVisibleTransition">
                        <DoubleAnimation Storyboard.TargetName="DetailsPresenter" Storyboard.TargetProperty="ContentHeight" Duration="00:00:0.1" />
                    </Storyboard>
                </Grid.Resources>

                <Rectangle x:Name="BackgroundRectangle" Grid.RowSpan="2" Grid.ColumnSpan="2" Opacity="0" Fill="{Binding ColorPropertyOfItem}"/>
                <Rectangle x:Name="InvalidVisualElement" Grid.RowSpan="2" Grid.ColumnSpan="2" Opacity="0" Fill="#FFF7D8DB"/>

                <localprimitives:DataGridRowHeader Grid.RowSpan="3" Name="RowHeader" localprimitives:DataGridFrozenGrid.IsFrozen="True" />
                <localprimitives:DataGridCellsPresenter Grid.Column="1" Name="CellsPresenter" localprimitives:DataGridFrozenGrid.IsFrozen="True" />
                <localprimitives:DataGridDetailsPresenter Grid.Row="1" Grid.Column="1" Name="DetailsPresenter" />
                <Rectangle Grid.Row="2" Grid.Column="1" Name="BottomGridLine" HorizontalAlignment="Stretch" Height="1" />
            </localprimitives:DataGridFrozenGrid>
        </ControlTemplate>
    </Setter.Value>
</Setter>

并且不要忘记改变Binding ColorPropertyOfItem该类型的不动产Brush在你的模型中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Silverlight DataGrid 行颜色绑定 的相关文章

  • 在 VS2008 的 XAML 编辑器中禁用 Intellisense?

    有没有办法在 Visual Studio 2008 的 XAML 编辑器中禁用 Intellisense 打字时通常会消耗很大的性能 有时我会等待十秒或更长时间 直到列表自动弹出 似乎在 选项 gt 文本编辑器 gt XAML 中 Inte
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • TextBlock TextWrapping 不换行 #2

    好吧 那么this https stackoverflow com questions 6625177 textblock textwrapping not wrapping解决方案没有帮助 XAML 在这里
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • Silverlight 5 - 改进/更改的综合列表

    是否有 silverlight 5 新增功能的完整列表 我看到了不同的博客等 但显然问题在于细节 当他们说更好的绑定支持到底有什么不同更好 等等 我想看详细的论文 Pete Brown 列出了 RC 中的主要变化 http 10rem ne
  • 禁用 WP7 浏览器控件中的滚动功能?

    是否可以在 Windows Phone 7 1 中禁用 Web 浏览器控件中的滚动 我已经看到很多关于它的问题 Windows Phone 7 0 Silverlight 但还没有答案 有任何想法吗 有一个博客文章在这里 http www
  • Silverlight 4relativeSourceFindAncestor绑定[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions Silverlight 4中会有Re
  • 过滤绑定到 ItemsControl 的 ICollectionView

    我想制作一个 WPF 应用程序来浏览菜肴食谱 过滤数据时遇到问题 我正在使用 ItemsControl 使我的数据在窗口中看起来像 图块 现在我想用 TextBox 过滤它 但我不知道出了什么问题 这是我的 XAML 绑定
  • WinRT 中的当前文化是错误的

    我正在尝试使用 WinRT 中的当前文化来格式化日期时间值 但CurrentCulture属性似乎并不尊重系统文化 我尝试了以下两个属性 System Globalization CultureInfo CurrentCulture Dis
  • 根据值更改 DataGrid 单元格颜色

    我有一个 WPF 数据网格 我想要根据值使用不同的单元格颜色 我的 xaml 上有以下代码 Style TargetType DataGridCell 但不是只选择一个单元格而是选择所有行 我缺少什么 如果您尝试设置DataGrid Cel
  • 使用 XAML 文件作为矢量图像源

    我希望能够使用矢量图形 最好在 XAML 中定义 作为图像控件的源 就像我当前可以使用 PNG 等光栅图像一样 这样我就可以轻松地混合和匹配位图和矢量图像 如下所示
  • 重新绑定 Silverlight 列表框控件后,如何让它列表框滚动到顶部?

    我有一个 silverlight 列表框 用作搜索结果框 我正在使用动态搜索 搜索框中的按键会导致事件触发以过滤此列表框的内容 我遇到的问题是 如果用户在未过滤框时向下滚动 然后进行搜索 列表框的重新绑定不会导致滚动返回到顶部 从而使结果看
  • 我应该始终在 Silverlight 游戏中使用游戏循环吗?

    我读过有关在 silverlight 中使用 CompositionTarget Rendering Timer 进行主要游戏循环的内容 用于命中测试和一般游戏逻辑 就像任何语言一样 这就是说 我想知道最好是一次在这个 x 像素内移动对象
  • UWP/XAML:如何使用BaseOn继承默认样式?

    微软官方article https msdn microsoft com en us windows uwp controls and patterns styling controls states 修改系统默认样式 您应该尽可能使用来自
  • WPF C# 输入框

    我正在使用 C 构建 WPF 应用程序 我想弹出一个对话框提示用户输入他 她的名字 之后 我将跟踪该名称并将一些数据保存到 txt使用该名称的文件 例如 输入的名称是姓名 约翰 所以我有数据数据 1 2 3 然后我将 数据 保存在John
  • 在 Silverlight 中使用 RIA 服务时如何扩展实体?

    在我的 Silverlight 解决方案的服务器端 我有 2 个项目 提供 Silverlight 页面的网站 实体框架数据访问层 我有一个具有 FirstName 和 LastName 属性的实体 我想添加一个可从 Silverlight
  • 使用 XAML 地图控件在基于 C# VS2013 WPF 的 OpenStreetMap 的地图上添加热图图层

    我正在尝试使用 XAML MAP 控件 https xamlmapcontrol codeplex com https xamlmapcontrol codeplex com 在基于 C VS2013 WPF 的 OpenStreetMap
  • Silverlight 4 PLINQ

    我有一个非常简单的问题 是否可以将 PLINQ 与 Silverlight 4 一起使用 因为它似乎不存在于最常引用的程序集中 它不受支持 但您可以在这里投票 http dotnet uservoice com forums 4325 si
  • 在 XAML 中设置依赖项属性时,为什么会在运行时绕过 .NET 属性包装器?

    我正在阅读 Adam Nathan 的书 WPF 4 Unleashed 第 82 页有以下警告 在 XAML 中设置依赖属性时 NET 属性包装器会在运行时被绕过 虽然 XAML 编译器依赖于 编译时的属性包装器 WPF 调用底层 直接在
  • 使用 Linq to XML 将 XElement 添加到 XML 文件

    使用 Linq to XML 我尝试将 XElement 添加到现有 XML 文件 它必须在 Windows Phone NET 框架中完成 目前我的 XML 文件如下所示

随机推荐