<UserControl
x:Class="NavTest.Views.Page5"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cv="clr-namespace:NavTest.Components"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dp="clr-namespace:NavTest.Assets.Dp"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:local="clr-namespace:NavTest.Views"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mv="clr-namespace:NavTest.ViewModels"
d:DataContext="{d:DesignInstance mv:Page5ViewModel}"
d:DesignHeight="450"
d:DesignWidth="800"
Background="Transparent"
FontSize="50"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.1*" />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<dp:CostomTextBox
dp:TextBoxHelper.Title="this addition"
IsHighLighted="True"
Text="{Binding RelativeSource={RelativeSource Mode=Self}, Path=(dp:TextBoxHelper.Title)}" />
<TextBlock Background="{Binding MyBrush}" Text="ddd" />
</StackPanel>
<Border
Grid.Row="1"
BorderBrush="Yellow"
BorderThickness="2"
CornerRadius="10">
<Border.Background>
<LinearGradientBrush>
<GradientStop Offset="0.1" Color="#d378ff" />
<GradientStop Offset="0.5" Color="#7895ff" />
<GradientStop Offset="1" Color="#5ad7fd" />
</LinearGradientBrush>
</Border.Background>
<DataGrid
x:Name="myDataGrid"
Margin="30"
AutoGenerateColumns="False"
Background="Transparent"
BorderBrush="#CDCDCD"
CanUserAddRows="False"
ColumnHeaderHeight="40"
ColumnWidth="*"
GridLinesVisibility="None"
IsReadOnly="True"
ItemsSource="{Binding MyStudents}"
RowDetailsVisibilityMode="Collapsed"
RowHeaderWidth="0"
RowHeight="40"
SelectedIndex="{Binding DetailInex}">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Foreground" Value="#1B1B1B" />
<Setter Property="BorderThickness" Value="0,0,0,1" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="BorderThickness" Value="0,0,0,1" />
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center" Content="{TemplateBinding Content}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Grid
Width="680"
Height="300"
Margin="10,3,10,3">
<DataGrid
Margin="30"
AutoGenerateColumns="False"
Background="White"
BorderBrush="#CDCDCD"
CanUserAddRows="False"
ColumnHeaderHeight="40"
ColumnWidth="*"
IsReadOnly="True"
ItemsSource="{Binding MyCourse}"
RowHeaderWidth="0"
RowHeight="30">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Foreground" Value="#1B1B1B" />
<Setter Property="BorderThickness" Value="0,0,0,1" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="BorderThickness" Value="0,0,0,1" />
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center" Content="{TemplateBinding Content}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding CourseName}"
Foreground="Black"
Header="课程名称" />
<DataGridTextColumn
Binding="{Binding Teacher}"
Foreground="Black"
Header="教师" />
<DataGridTextColumn
Binding="{Binding Score}"
Foreground="Black"
Header="分数" />
<DataGridTextColumn
Binding="{Binding Classroom}"
Foreground="Black"
Header="教室" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns>
<DataGridTemplateColumn Width="30">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton
Width="15"
Height="15"
BorderThickness="0"
Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.DetailCommand}"
CommandParameter="{Binding ElementName=myDataGrid}"
FontFamily="{StaticResource fontAwesome}">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="FontFamily" Value="{StaticResource fontAwesome}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border
x:Name="border"
Width="15"
Height="15">
<TextBlock
x:Name="textBlock"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Text="" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="textBlock" Property="TextBlock.Text" Value="" />
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter TargetName="textBlock" Property="TextBlock.Text" Value="" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ToggleButton.Style>
</ToggleButton>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Binding="{Binding Id}"
Foreground="Black"
Header="Id" />
<DataGridTextColumn
Binding="{Binding Name}"
Foreground="Black"
Header="姓名" />
<DataGridTextColumn
Binding="{Binding Age}"
Foreground="Black"
Header="年龄" />
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
</UserControl>
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using NavTest.Eneities;
using NavTest.Service.Ioc;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Controls;
using System.Windows.Media;
namespace NavTest.ViewModels
{
public partial class Page5ViewModel : ObservableObject, ISingleton
{
private readonly PLCModels pLCModelsIoc;
public Page5ViewModel(PLCModels pLCModelsIoc)
{
this.pLCModelsIoc = pLCModelsIoc;
this.PLCModels = pLCModelsIoc.pLCModels;
MyBrush = new SolidColorBrush(Colors.Red);
for (int i = 0; i < 50; i++)
{
MyStudents.Add(
new()
{
Id = i,
Age = $"{i + 10}",
Name = $"Name{i + 5}",
MyCourse = new()
{
new Course()
{
CourseName = "语文",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
},
new Course()
{
CourseName = "英语",
Teacher = "李老师",
Score = i + 61,
Classroom = $"教室{i}"
}
,
new Course()
{
CourseName = "数学",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
}
,
new Course()
{
CourseName = "语文",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
}
,
new Course()
{
CourseName = "语文",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
}
}
}
);
}
}
[ObservableProperty]
private ObservableCollection<PLCModel> pLCModels;
[ObservableProperty]
private Brush myBrush;
[ObservableProperty]
private List<Student> myStudents = new();
[ObservableProperty]
private int detailInex;
[RelayCommand]
public void Detail(DataGrid dataGrid)
{
DataGridRow dataGridRow = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(DetailInex);
if (dataGridRow.DetailsVisibility == System.Windows.Visibility.Visible)
{
dataGridRow.DetailsVisibility = System.Windows.Visibility.Collapsed;
}
else
{
dataGridRow.DetailsVisibility = System.Windows.Visibility.Visible;
}
}
}
}
public class Student
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string? Age { get; set; }
public List<Course>? MyCourse { get; set; }
}
public class Course
{
public string? CourseName { get; set; }
public string? Teacher { get; set; }
public int? Score { get; set; }
public string? Classroom { get; set; }
}
效果:

20240718修改 箭头上下bug=====
<UserControl
x:Class="WpfAppTest.Views.MyPageOneView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:con="clr-namespace:WpfAppTest.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:local="clr-namespace:WpfAppTest.Views"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:WpfAppTest.ViewModels"
d:DataContext="{d:DesignInstance vm:MyPageOneViewModel}"
d:DesignHeight="768"
d:DesignWidth="1024"
mc:Ignorable="d">
<UserControl.Resources>
<con:MultiParamConverter x:Key="MultiParamConverter" />
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<DockPanel Grid.RowSpan="2">
<TextBlock
HorizontalAlignment="Center"
DockPanel.Dock="Top"
FontSize="20"
Foreground="White"
Text="多重绑定" />
<DataGrid
Margin="10"
AlternationCount="2"
AutoGenerateColumns="False"
CanUserAddRows="False"
ColumnHeaderHeight="40"
ColumnWidth="*"
ItemsSource="{Binding Stu}"
RowDetailsVisibilityMode="Collapsed"
RowHeaderWidth="0">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" Header="Id" />
<DataGridTextColumn Binding="{Binding Name}" Header="Name" />
<DataGridTextColumn Binding="{Binding Age}" Header="Age" />
<DataGridTextColumn Binding="{Binding Description}" Header="Description" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button
Width="60"
HorizontalAlignment="Center"
Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.MyButtonCommand}"
CommandParameter="{Binding}"
Content="申请">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled">
<Setter.Value>
<MultiBinding Converter="{StaticResource MultiParamConverter}">
<Binding Path="Age" />
<Binding Path="Id" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
<Grid Grid.RowSpan="2" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock
HorizontalAlignment="Center"
FontSize="20"
Foreground="White"
Text="多重表格" />
<DataGrid
x:Name="myDataGrid"
Grid.Row="1"
Margin="30"
AutoGenerateColumns="False"
BorderBrush="#CDCDCD"
CanUserAddRows="False"
ColumnHeaderHeight="40"
ColumnWidth="*"
IsReadOnly="True"
ItemsSource="{Binding Stu}"
RowHeaderWidth="0"
RowHeight="40"
SelectedIndex="{Binding DetailInex}">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="BorderThickness" Value="0,0,0,1" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="BorderThickness" Value="0,0,0,1" />
<Setter Property="DetailsVisibility" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.RowDetailsVisibility}" />
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center" Content="{TemplateBinding Content}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Grid
Width="680"
Height="300"
Margin="10,3,10,3">
<DataGrid
Margin="30"
AutoGenerateColumns="False"
Background="White"
BorderBrush="#CDCDCD"
CanUserAddRows="False"
ColumnHeaderHeight="40"
ColumnWidth="*"
IsReadOnly="True"
ItemsSource="{Binding MyCourse}"
RowHeaderWidth="0"
RowHeight="30">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding CourseName}"
Foreground="Black"
Header="课程名称" />
<DataGridTextColumn
Binding="{Binding Teacher}"
Foreground="Black"
Header="教师" />
<DataGridTextColumn
Binding="{Binding Score}"
Foreground="Black"
Header="分数" />
<DataGridTextColumn
Binding="{Binding Classroom}"
Foreground="Black"
Header="教室" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns>
<DataGridTemplateColumn Width="30">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton
x:Name="tgbtn"
Width="15"
Height="15"
BorderThickness="0"
Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.DetailCommand}"
CommandParameter="{Binding ElementName=myDataGrid}"
Foreground="Black"
Style="{DynamicResource ToggleButtonStyle}">
<ToggleButton.IsChecked>
<Binding Path="DataContext.RowDetailsVisibility" RelativeSource="{RelativeSource AncestorType=UserControl}" />
</ToggleButton.IsChecked>
</ToggleButton>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Binding="{Binding Id}"
Foreground="Black"
Header="Id" />
<DataGridTextColumn
Binding="{Binding Name}"
Foreground="Black"
Header="姓名" />
<DataGridTextColumn
Binding="{Binding Age}"
Foreground="Black"
Header="年龄" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
</UserControl>
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using WpfAppTest.Share.Models;
namespace WpfAppTest.ViewModels
{
public partial class MyPageOneViewModel : ObservableObject
{
[ObservableProperty]
private string myTest1 = "测试页1";
public MyPageOneViewModel()
{
for (int i = 0; i < 50; i++)
{
Stu.Add(
new()
{
Id = i,
Age = i + 10,
Name = $"Name{i + 5}",
MyCourse = new()
{
new Course()
{
CourseName = "语文",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
},
new Course()
{
CourseName = "英语",
Teacher = "李老师",
Score = i + 61,
Classroom = $"教室{i}"
}
,
new Course()
{
CourseName = "数学",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
}
,
new Course()
{
CourseName = "语文",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
}
,
new Course()
{
CourseName = "语文",
Teacher = "张老师",
Score = i + 60,
Classroom = $"教室{i}"
}
}
}
);
}
}
[ObservableProperty]
private ObservableCollection<Student> stu = new();
[ObservableProperty]
private int detailInex = -1;
[ObservableProperty]
private bool isChecked;
[ObservableProperty]
private Visibility rowDetailsVisibility = Visibility.Collapsed;
[RelayCommand]
public void MyButton(Student student)
{
MessageBox.Show(student.Name);
}
[RelayCommand]
public void Detail(DataGrid dataGrid)
{
DataGridRow dataGridRow = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(DetailInex);
if (dataGridRow.DetailsVisibility == Visibility.Visible)
{
IsChecked = false;
dataGridRow.DetailsVisibility = Visibility.Collapsed;
}
else
{
IsChecked = true;
dataGridRow.DetailsVisibility = Visibility.Visible;
}
}
}
}

4080

被折叠的 条评论
为什么被折叠?



