use*_*552 1 c# wpf wpfdatagrid .net-3.5
我有一个 WPF DataGrid,当其中没有记录时,我想在其中显示一条消息“无数据”。所以我已经完成了 pchajer 提供的答案中解释的内容,但是当数据网格显示没有数据时,消息不会显示。我认为我遇到了问题AncestorType,我认为我没有正确指定,但我不知道如何解决这个问题。我完全不明白怎么办AncestorType运作...
下面是我的代码:
\n\n<Window x:Class="My.Apps.WPF.Test.wMain"\n xmlns:local="clr-namespace:My.Apps.WPF.Test">\n\n<dg:DataGrid.Style>\n <Style TargetType="dg:DataGrid">\n <Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter>\n <Style.Triggers>\n <DataTrigger Binding="{Binding DataContext.IsRecordExists, \n RelativeSource={RelativeSource Mode=FindAncestor,\n AncestorType={x:Type local:wMain}}}" Value="false">\n <Setter Property="RowHeight" Value="0"></Setter>\n <Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter>\n </DataTrigger>\n </Style.Triggers>\n </Style>\n</dg:DataGrid.Style>\n\n<!-- Missatge quan no hi ha documents pel proc\xc3\xa9s seleccionat -->\n<dg:DataGrid.RowDetailsTemplate>\n <DataTemplate>\n <StackPanel>\n <TextBlock Text="No hi ha documents disponibles pel proc\xc3\xa9s seleccionat" Width="400"></TextBlock>\n </StackPanel>\n </DataTemplate>\n</dg:DataGrid.RowDetailsTemplate>\n\n</Window>\nRun Code Online (Sandbox Code Playgroud)\n\n隐藏代码 (XAML.cs):
\n\nnamespace My.Apps.WPF.Test\n{\n public partial class wMain : ViewBaseControl\n {\n\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
您可以绑定到DataGrid的HasItems属性并更改模板:
<DataGrid.Style>
<Style TargetType="DataGrid">
<Style.Triggers>
<DataTrigger Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}" Value="false">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGrid">
<TextBlock Text="No data..." />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
Run Code Online (Sandbox Code Playgroud)
如果 中没有行,则永远不会显示任何行详细信息,DataGrid因此该方法不起作用。
编辑:如果您想在没有行的情况下显示列标题,您应该DataGridColumnHeadersPresenter在模板中包含:
<DataTrigger Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}" Value="false">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGrid">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
<TextBlock Text="No data..." Grid.Row="1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)