Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示消息';无数据';当WPF DataGrid没有行时_C#_Wpf_.net 3.5_Wpfdatagrid - Fatal编程技术网

C# 显示消息';无数据';当WPF DataGrid没有行时

C# 显示消息';无数据';当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-

我有一个WPF
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>