C# 显示消息';无数据';当WPF DataGrid没有行时
我有一个WPFC# 显示消息';无数据';当WPF DataGrid没有行时,c#,wpf,.net-3.5,wpfdatagrid,C#,Wpf,.net 3.5,Wpfdatagrid,我有一个WPFDataGrid,当其中没有记录时,我想在其中显示一条消息“No data”。所以我已经做了pchajer提供的答案中解释的事情,但是当datagrid显示时没有数据,消息就不会显示。我认为我在AncestorType方面有问题,我认为我没有正确指定,但我不知道如何解决这个问题。我完全不明白AncestorType是如何工作的 下面是我的代码: <Window x:Class="My.Apps.WPF.Test.wMain" xmlns:local="clr-
DataGrid
,当其中没有记录时,我想在其中显示一条消息“No data”。所以我已经做了pchajer提供的答案中解释的事情,但是当datagrid显示时没有数据,消息就不会显示。我认为我在AncestorType
方面有问题,我认为我没有正确指定,但我不知道如何解决这个问题。我完全不明白AncestorType
是如何工作的
下面是我的代码:
<Window x:Class="My.Apps.WPF.Test.wMain"
xmlns:local="clr-namespace:My.Apps.WPF.Test">
<dg:DataGrid.Style>
<Style TargetType="dg:DataGrid">
<Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsRecordExists,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:wMain}}}" Value="false">
<Setter Property="RowHeight" Value="0"></Setter>
<Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</dg:DataGrid.Style>
<!-- Missatge quan no hi ha documents pel procés seleccionat -->
<dg:DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="No hi ha documents disponibles pel procés seleccionat" Width="400"></TextBlock>
</StackPanel>
</DataTemplate>
</dg:DataGrid.RowDetailsTemplate>
</Window>
您可以绑定到
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>
您可以绑定到
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>
这是wMain类中的IsRecordExists属性吗?这是wMain类中的IsRecordExists属性吗?好的,您的解决方案可以工作,但未显示datagrid列标题。您的示例是否可能?然后您需要在模板中包含DataGridColumnHeadersPresenter。请参阅我的编辑。下面显示错误:错误109'System.Windows.Controls.Grid'不是Setter中'System.Windows.Controls.Control.Template'属性的有效值。Template属性应设置为ControlTemplate,而不是根据我的回答设置的其他属性。我不知道为什么在示例代码中为DataGrid使用dg前缀,但是对于TargetType也是一样的,即:
TargetType=“dg:DataGrid”
Ok,您的解决方案可以工作,但不会显示DataGrid列标题。您的示例是否可能?然后您需要在模板中包含DataGridColumnHeadersPresenter。请参阅我的编辑。下面显示错误:错误109'System.Windows.Controls.Grid'不是Setter中'System.Windows.Controls.Control.Template'属性的有效值。Template属性应设置为ControlTemplate,而不是根据我的回答设置的其他属性。我不知道为什么在示例代码中为DataGrid使用dg前缀,但是对于TargetType也是一样的,即:TargetType=“dg:DataGrid”
<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>