【发布时间】:2018-04-29 04:50:15
【问题描述】:
我有一个具有自定义样式的数据网格,因此我可以在整个应用程序中重复使用这种格式。它有一个自定义的列标题样式、行样式等。我能够让文本换行在列标题上工作,并且数据正确绑定到它。当我尝试在单元格上使用相同的技术时,绑定似乎不起作用,但包装确实起作用。我已阅读以下帖子,但似乎每次放置数据网格后都需要设置样式。不能在资源字典中完成还是我在错误的位置应用了包装?
wpf DataGrid change wrapping on cells
WPF toolkit datagrid cell text wrapping
WPF DataGrid Cell Text Wrapping - set to NoWrap (False)
这里是数据网格定义(修剪):
<Style x:Key="EmbedDG" TargetType="{x:Type DataGrid}" >
<Setter Property="ColumnHeaderStyle" Value="{DynamicResource DGCH}" />
<Setter Property="CellStyle" Value="{DynamicResource EmbedDGCE}" />
</Style>
这是显示文本环绕的工作 DGCH 样式:
<Style x:Key="DGCH" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
这是不起作用的单元格样式(图 1 有 contenttemplate,2 没有):
<Style x:Key="EmbedDGCE" TargetType="{x:Type DataGridCell}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
编辑:
<DataGrid Style="{DynamicResource EmbedDG}" ItemsSource="{Binding Tags}" >
<DataGrid.Columns>
<DataGridTextColumn Header="Tag Type" Binding="{Binding TagType}" Width="180" />
<DataGridTextColumn Header="Tag Comments" Binding="{Binding Message}" Width="300"/>
</DataGrid.Columns>
</DataGrid>
【问题讨论】:
-
图片 2 有一个固定的宽度,恰好容纳了单元格中的所有文本。如果宽度更小,文本将不会换行。只是一些澄清。
-
“路径变得混乱”、“在我放置数据网格之后”、“绑定无效”——你能澄清一下这些短语的含义吗?
-
我最初从图 2 开始。它采用该集合并绑定元素:名称字符串和消息字符串。它可以工作,但消息字符串对于宽度来说太长了,我想包装消息。这就是我添加自定义单元格样式以应用文本换行(如列标题)的时候。应用单元格样式后,绑定中的数据是集合的名称,而不是集合的属性(图 1)。
-
所以你在用这些风格做某事。请显示 XAML。我不需要担心“放置数据网格”吗?
-
添加了自定义dg的xaml。
标签: wpf xaml datagrid resourcedictionary