- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用以下代码为 DataGridTextColumn
创建样式
<Style TargetType="{x:Type DataGridTextColumn}">
...
</Style>
但是,Visual Studio 2010 用蓝线突出显示 {x:Type DataGridTextColumn}
并详细说明:调用目标已引发异常。
为什么会发生这种情况以及如何解决它?
最佳答案
您无法设置 DataGridTextColumn
的样式,因为 DataGridTextColumn
不是从 FrameworkElement
(或 FrameworkContentElement
)派生的。仅 FrameworkElement 等支持样式。
当您尝试在 XAML 中为任何不是 FrameworkElement
或 FrameworkContentElement
的类型创建样式时,您会收到该错误消息。
你如何解决这个问题?与任何问题一样,有志者事竟成。在这种情况下,我认为最简单的解决方案是为 DataGrid 创建一个附加属性来分配 DataGridColumn 样式:
<DataGrid ...>
<local:MyDataGridHelper.TextColumnStyle>
<Style TargetType="FrameworkElement">
... setters here ...
</Style>
</local:MyDataGridHelper.TextColumnStyle>
...
实现将遵循以下原则:
public class MyDataGridHelper : DependencyObject
{
// Use propa snipped to create attached TextColumnStyle with metadata:
... RegisterAttached("TextColumnStyle", typeof(Style), typeof(MyDataGridHelper), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
var grid = (DataGrid)obj;
if(e.OldValue==null && e.NewValue!=null)
grid.Columns.CollectionChanged += (obj2, e2) =>
{
UpdateColumnStyles(grid);
}
}
}
private void UpdateStyles(DataGrid grid)
{
var style = GetTextColumnStyle(grid);
foreach(var column in grid.Columns.OfType<DataGridTextColumn>())
foreach(var setter in style.Setters.OfType<Setter>())
if(setter.Value is BindingBase)
BindingOperations.SetBinding(column, setter.Property, setter.Value);
else
column.SetValue(setter.Property, setter.Value);
}
}
其工作方式是,每当附加属性发生更改时,都会为网格上的 Columns.CollectionChanged 事件添加一个处理程序。当 CollectionChanged 事件触发时,所有列都会使用设置的样式进行更新。
请注意,上面的代码不能处理优雅地删除并重新添加样式的情况:注册了两个事件处理程序。对于一个真正强大的解决方案,您需要通过添加另一个包含事件处理程序的附加属性来解决此问题,以便事件处理程序可以取消注册,但出于您的目的,我认为这并不重要。
这里的另一个警告是,直接使用 SetBinding 和 SetValue 将导致 DependencyProperty 的 BaseValueSource 为 Local
而不是 DefaultStyle
。这可能对你的情况没有什么影响,但我想我应该提到它。
关于wpf - 为什么我无法设置 DataGridTextColumn 的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2630292/
我正在尝试提供一个行为类似于 DataGridTextColumn 的 DataGrid 列,但在编辑模式下有一个附加按钮。我查看了 DataGridTemplateColumn,但似乎更容易将 Da
这可能(希望)有一个微不足道或非常简单的答案。 假设我想要为我的 DataGrid 自定义标题.我可以使用 DataTemplate像这样:
有没有办法将工具提示添加到 DataGridColumn 标题并仍然保留排序功能。下面的代码不起作用(它不显示工具提示) 当我使用下面的代码时
我有几个数字列,希望它们右对齐。这是一个有点人为的例子来说明我的问题:
我有一个 DataGridTextColumn ElementStyle,如下所示:
也许,我想,事情太简单了。我有一个数据网格,从后面的代码动态添加列。这行得通。然后我有带有整数值的列,我希望在列中看到右对齐,但它失败了。我的代码是: public List> Integer
我有一个包含 3 个 DataGridTextColumns 的 DataGrid。我希望第一个占 40%,另外两个占 30%,基本上我需要它们填满整个 DataGrid。
我已经搜索并尝试了许多方法来格式化出生日期列,不仅按月份和日期,还考虑到年份。 我不敢相信这这么难做到。 我创建了几个类型转换器,它们将字符串“MM/dd/yyyy”转换为日期时间,尝试转换为不带“/
我有这个 WPF DataGrid:
首先,我使用 WPF 和 DataGrid,因为我想要列标题。但是,如果有办法做到这一点并且仍然有列标题,我不会接受这个解决方案。 现在,我进行了一些广泛的搜索并尝试了通过谷歌搜索找到的各种解决方案,
为什么这样做...
如何向 DataGridTextColumn 添加边距或填充? 最佳答案 没有示例代码的答案不是很有帮助。用这个:
如果我创建到 IsReadOnly 的绑定(bind)DataGridTextColumn 的属性(property),它没有实现。如果我通过标记设置它,它可以工作。 IsReferenceI
我目前有一个绑定(bind)到 Person 对象的 DataGrid: ... 当用户编辑网格并添加新用
我正在使用 WPFtoolkit DataGrid ,我必须将文本包装在 DataGridTextColumn 中或我必须将 ToolTip 添加到文本列。我已经在网上搜索过,但找不到合适的解决方案。
我尝试使用以下代码为 DataGridTextColumn 创建样式 ... 但是,Visual Studio 2010 用蓝线突出显示 {x:Type DataGridTe
我正在使用 DataTrigger 将空单元格替换为“-”文本。我的代码:
我正在尝试以编程方式添加 DataGridTextColumn,并设置一些属性以在单元格中显示文本。我不想使用 TemplateColumn,因为它需要双击才能进入编辑模式。我找不到可以设置文本对齐方
我正在使用 DataTrigger 将空单元格替换为“-”文本。我的代码:
我尝试做的是创建一个 Style 以在 Datagrid 中的所有 DataGridTextColumns 上应用 WordWrap,而不是像这样明确设置它。
我是一名优秀的程序员,十分优秀!