当前位置:   article > 正文

C#学习--项目实战之隐藏式导航栏_c#隐藏显示菜单栏

c#隐藏显示菜单栏

C#学习--项目实战之隐藏式导航栏


最近在开发一个视觉工具项目。突发奇想,想写一个隐藏式的导航栏,对处理过的图片做一个记录,并保存在导航栏中,点击对应的位置,可以唤出对应的图片。

界面展示

设计器界面
在这里插入图片描述
实际界面
在这里插入图片描述

代码

View.xaml
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2.5*"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <Grid Name="ImageG" Grid.Column="0" Grid.Row="0">
            <Border Name="BtnBo" HorizontalAlignment="Left" Width="15" Height="100" BorderThickness="0" Background="#7FBEF0F6" MouseEnter="HideMenu_MouseEnter">
                <Image Source="../Resource/Image/menu0.png" Height="50"></Image>
            </Border>

            <Border Name="HideMenu" Background="#7FBEF0F6" MouseLeave="HideMenu_MouseLeave" Width="100" HorizontalAlignment="Left" Margin="-100 0 0 0">
                <ListBox Background="{x:Null}" ItemsSource="{Binding ImageList}" SelectedItem="{Binding ImageSelected}" BorderThickness="0" SelectedIndex="{Binding ImageIndex}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Image Source="{Binding Image}" Width="35"></Image>
                                <Label Content="{Binding Tag}" FontSize="10" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Border>

            <Image Source="{Binding ImageSource}" Margin="5"></Image>

            <Border Background="#66EDF1CC" Width="80" HorizontalAlignment="Right">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Label Grid.Row="0" Content="图像信息" VerticalAlignment="Top" HorizontalAlignment="Center"></Label>
                    <TextBlock Grid.Row="1" Text="{Binding SrcImage.Rows}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
                    <TextBlock Grid.Row="2" Text="{Binding SrcImage.Cols}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
                </Grid>
            </Border>
        </Grid>

        <GroupBox Header="Log" Grid.Column="0" Grid.Row="1" Margin="5">
            <ScrollViewer>
                <TextBlock Name="LogContent" Text="{Binding LogContent}" ScrollViewer.CanContentScroll="True"></TextBlock>
            </ScrollViewer>
        </GroupBox>

        <Grid Grid.Row="0" Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            
            <Button Grid.Column="0" Grid.Row="0" Margin="5" Content="清空图像" Command="{Binding ClearImageCommand}"></Button>
            <Button Grid.Column="1" Grid.Row="0" Margin="5" Content="加载图像" Command="{Binding LoadImageCommand}"></Button>

            <Button Grid.Column="0" Grid.Row="1" Margin="5" Content="平移" Command="{Binding TranslationCommand}"></Button>
            <Button Grid.Column="0" Grid.Row="2" Margin="5" Content="旋转" Command="{Binding RotateCommand}"></Button>
            <Button Grid.Column="0" Grid.Row="3" Margin="5" Content="放大" Command="{Binding BiggerCommand}"></Button>
            <Button Grid.Column="0" Grid.Row="4" Margin="5" Content="缩小" Command="{Binding SmallerCommand}"></Button>

            <Grid Grid.Column="1" Grid.Row="1">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Grid.Row="0" Content="垂直"></Label>
                <TextBox Grid.Column="1" Grid.Row="0" Margin="1" Text="{Binding Vertical}" InputScope="Number"></TextBox>
                <Label Grid.Column="0" Grid.Row="1" Content="水平"></Label>
                <TextBox Grid.Column="1" Grid.Row="1" Margin="1" Text="{Binding Horizontal}" InputScope="Number"></TextBox>
            </Grid>

            <Grid Grid.Column="1" Grid.Row="2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Grid.Row="0" Content="角度" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
                <TextBox Grid.Column="1" Grid.Row="0" Margin="1 15 1 15" Text="{Binding Angle}" InputScope="Number"></TextBox>
            </Grid>

            <Grid Grid.Column="1" Grid.Row="3">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Grid.Row="0" Content="倍数" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
                <TextBox Grid.Column="1" Grid.Row="0" Margin="1 15 1 15" Text="{Binding BigTimes}" InputScope="Number"></TextBox>
            </Grid>

            <Grid Grid.Column="1" Grid.Row="4">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Grid.Row="0" Content="倍数" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
                <TextBox Grid.Column="1" Grid.Row="0" Margin="1 15 1 15" Text="{Binding SmalleTimes}" InputScope="Number"></TextBox>
            </Grid>
        </Grid>
    </Grid>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
View.cs
public partial class AffineView : Window
    {
        private Storyboard mStoryboard0;
        private Storyboard mStoryboard1;
        private AffineViewModel viewmodel;
        private bool isShowedMenu = false;
        public AffineView()
        {
            InitializeComponent();

            viewmodel = new AffineViewModel();
            this.DataContext = viewmodel;
            InitAnimation();
            
        }

        private void InitAnimation()
        {
            //! 展示
            DoubleAnimation da = new DoubleAnimation();
            da.From = null;
            da.To = 100;
            da.Duration = new Duration(TimeSpan.FromSeconds(0.5));
            HideMenu.RenderTransform = new TranslateTransform();
            mStoryboard0 = new Storyboard();
            mStoryboard0.Children.Add(da);
            Storyboard.SetTarget(da, HideMenu);
            Storyboard.SetTargetProperty(da, new PropertyPath("RenderTransform.X"));

            //!隐藏
            DoubleAnimation doa = new DoubleAnimation();
            doa.From = null;
            doa.To = 0;
            doa.Duration = new Duration(TimeSpan.FromSeconds(0.5));
            mStoryboard1 = new Storyboard();
            mStoryboard1.Children.Add(doa);
            Storyboard.SetTarget(doa, HideMenu);
            Storyboard.SetTargetProperty(doa, new PropertyPath("RenderTransform.X"));
        }

        private void HideMenu_MouseEnter(object sender, MouseEventArgs e)
        {
            if (!isShowedMenu)
            {
                mStoryboard0.Begin(this);
                isShowedMenu = true;
                BtnBo.Visibility = Visibility.Collapsed;
            }
            
        }
        
        private void HideMenu_MouseLeave(object sender, MouseEventArgs e)
        {
            if (isShowedMenu)
            {
                mStoryboard1.Begin(this);
                isShowedMenu = false;
                BtnBo.Visibility = Visibility.Visible;
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
ViewModel.cs
public class AffineViewModel : ObservableObject
    {
        private ObservableCollection<ImageModel> _imageModels;
        public ObservableCollection<ImageModel> ImageList
        {
            get => _imageModels;
            set
            {
                if (value.Count > 10)
                {
                    value.RemoveAt(0);
                }
                SetProperty(ref _imageModels, value);
            }
        }

        private ImageModel _imageSelected;
        public ImageModel ImageSelected
        {
            get => _imageSelected;
            set
            {
                if (_imageSelected != value)
                {
                    if (value != null)
                    {
                        UpdateImage(value.Image);
                    }
                }
                SetProperty(ref _imageSelected, value);
            }
        }

        private BitmapSource _imageSource;
        public BitmapSource ImageSource
        {
            get => _imageSource;
            set
            {
                SetProperty(ref _imageSource, value);
            }
        }

        private string _logContent;
        public string LogContent
        {
            get => _logContent;
            set
            {
                SetProperty(ref _logContent, value);
            }
        }

        private Mat _srcImage;
        public Mat SrcImage
        {
            get => _srcImage;
            set
            {
                SetProperty(ref _srcImage, value);
            }
        }

        private int _imageIndex;
        public int ImageIndex
        {
            get => _imageIndex;
            set
            {
                SetProperty(ref _imageIndex, value);
            }
        }

        private int _vertical;
        public int Vertical
        {
            get => _vertical;
            set
            {
                SetProperty(ref _vertical, value);
            }
        }

        private int _horizontal;
        public int Horizontal
        {
            get => _horizontal;
            set
            {
                SetProperty(ref _horizontal, value);
            }
        }

        private int _angle;
        public int Angle
        {
            get => _angle;
            set
            {
                SetProperty(ref _angle, value);
            }
        }

        private int _bigTimes;
        public int BigTimes
        {
            get => _bigTimes;
            set
            {
                SetProperty(ref _bigTimes, value);
            }
        }

        private int _smalleTimes;
        public int SmalleTimes
        {
            get => _smalleTimes;
            set
            {
                SetProperty(ref _smalleTimes, value);
            }
        }

        public IRelayCommand ClearImageCommand { get; set; }
        public IRelayCommand LoadImageCommand { get; set; }
        public IRelayCommand TranslationCommand { get; set; }
        public IRelayCommand RotateCommand { get; set; }
        public IRelayCommand BiggerCommand { get; set; }
        public IRelayCommand SmallerCommand { get; set; }

        public AffineViewModel()
        {
            ClearImageCommand = new RelayCommand(ClearImage);
            LoadImageCommand = new RelayCommand(LoadImage);
            TranslationCommand = new RelayCommand(Translation);
            RotateCommand = new RelayCommand(Rotate);
            BiggerCommand = new RelayCommand(Bigger);
            SmallerCommand = new RelayCommand(Smaller);

            ImageList = new ObservableCollection<ImageModel>();

            Reecord("仿射变换");
        }

        private void Smaller()
        {
            if (SrcImage != null)
            {
                if (SmalleTimes != 0)
                {
                    OpenCvSharp.Point center = new OpenCvSharp.Point(SrcImage.Cols / 2, SrcImage.Rows / 2);
                    float angle = 0;
                    float scale = 1.0f / SmalleTimes;
                    Mat rot_mat = Cv2.GetRotationMatrix2D(center, angle, scale);
                    Mat warp_rotate_dst = Mat.Zeros(SrcImage.Rows, SrcImage.Cols, SrcImage.Type());
                    Cv2.WarpAffine(SrcImage, warp_rotate_dst, rot_mat, warp_rotate_dst.Size());

                    var hBitmap = warp_rotate_dst.ToBitmap().GetHbitmap();
                    var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(
                                        hBitmap, IntPtr.Zero, Int32Rect.Empty,
                                        BitmapSizeOptions.FromEmptyOptions());

                    ImageModel model = new ImageModel()
                    {
                        Image = bitmapSource,
                        Tag = "仿射变换_缩小"
                    };
                    ImageList.Add(model);
                    ImageSource = bitmapSource;
                    ImageIndex = ImageList.Count - 1;

                    GDIHelper.DeleteObject(hBitmap);

                    SrcImage = warp_rotate_dst;
                    Reecord("仿射变换_缩小");
                }
            }
        }

        private void Bigger()
        {
            if (SrcImage != null)
            {
                if (BigTimes != 0)
                {
                    OpenCvSharp.Point center = new OpenCvSharp.Point(SrcImage.Cols / 2, SrcImage.Rows / 2);
                    float angle = 0;
                    float scale = BigTimes;
                    Mat rot_mat = Cv2.GetRotationMatrix2D(center, angle, scale);
                    Mat warp_rotate_dst = Mat.Zeros(SrcImage.Rows, SrcImage.Cols, SrcImage.Type());

                    double new_height = SrcImage.Rows * scale;
                    double new_width = SrcImage.Cols * scale;
                    rot_mat.At<double>(0, 2) += (new_width - SrcImage.Cols) / 2;
                    rot_mat.At<double>(1, 2) += (new_height - SrcImage.Rows) / 2;
                    OpenCvSharp.Rect bbox = new RotatedRect(new Point2f(SrcImage.Cols / 2 * scale, SrcImage.Rows / 2 * scale), new Size2f(SrcImage.Cols * scale, SrcImage.Rows * scale), angle).BoundingRect();
                    Cv2.WarpAffine(SrcImage, warp_rotate_dst, rot_mat, bbox.Size);

                    var hBitmap = warp_rotate_dst.ToBitmap().GetHbitmap();
                    var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(
                                        hBitmap, IntPtr.Zero, Int32Rect.Empty,
                                        BitmapSizeOptions.FromEmptyOptions());

                    ImageModel model = new ImageModel()
                    {
                        Image = bitmapSource,
                        Tag = "仿射变换_放大"
                    };
                    ImageList.Add(model);
                    ImageSource = bitmapSource;
                    ImageIndex = ImageList.Count - 1;

                    GDIHelper.DeleteObject(hBitmap);

                    SrcImage = warp_rotate_dst;
                    Reecord("仿射变换_放大");
                }
            }
        }

        private void Rotate()
        {
            if (SrcImage != null)
            {
                OpenCvSharp.Point center = new OpenCvSharp.Point(SrcImage.Cols / 2, SrcImage.Rows / 2);
                float angle = 0.0f - Angle;
                float scale = 1.0f;
                Mat rot_mat = Cv2.GetRotationMatrix2D(center, angle, scale);
                Mat warp_rotate_dst = Mat.Zeros(SrcImage.Rows, SrcImage.Cols, SrcImage.Type());
                //Cv2.WarpAffine(SrcImage, warp_rotate_dst, rot_mat, warp_rotate_dst.Size());
                double sin_angle = Math.Sin(Math.Abs(angle) * Math.PI / 180);
                double cos_angle = Math.Cos(Math.Abs(angle) * Math.PI / 180);
                double new_height = SrcImage.Cols * sin_angle + SrcImage.Rows * cos_angle;
                double new_width = SrcImage.Cols * cos_angle + SrcImage.Rows * sin_angle;
                rot_mat.At<double>(0, 2) += (new_width - SrcImage.Cols) / 2;
                rot_mat.At<double>(1, 2) += (new_height - SrcImage.Rows) / 2;

                OpenCvSharp.Rect bbox = new RotatedRect(new Point2f(SrcImage.Cols / 2, SrcImage.Rows / 2), new Size2f(SrcImage.Cols, SrcImage.Rows), angle).BoundingRect();
                Cv2.WarpAffine(SrcImage, warp_rotate_dst, rot_mat, bbox.Size);

                var hBitmap = warp_rotate_dst.ToBitmap().GetHbitmap();
                var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(
                                    hBitmap, IntPtr.Zero, Int32Rect.Empty,
                                    BitmapSizeOptions.FromEmptyOptions());

                ImageModel model = new ImageModel()
                {
                    Image = bitmapSource,
                    Tag = "仿射变换_旋转"
                };
                ImageList.Add(model);
                ImageSource = bitmapSource;
                ImageIndex = ImageList.Count - 1;

                GDIHelper.DeleteObject(hBitmap);

                SrcImage = warp_rotate_dst;
                Reecord("仿射变换_旋转");
            }
        }

        private void Translation()
        {
            if (SrcImage != null)
            {
                Point2f[] srcTri = new Point2f[3];
                srcTri[0] = new Point2f(0.0f, 0.0f);
                srcTri[1] = new Point2f(SrcImage.Cols - 1.0f, 0.0f);
                srcTri[2] = new Point2f(0.0f, SrcImage.Rows - 1.0f);
                Point2f[] dstTri = new Point2f[3];
                dstTri[0] = new Point2f(Horizontal, Vertical);
                dstTri[1] = new Point2f(SrcImage.Cols - 1.0f + Horizontal, Vertical);
                dstTri[2] = new Point2f(Horizontal, SrcImage.Rows - 1.0f + Vertical);

                Mat warp_mat = Cv2.GetAffineTransform(srcTri, dstTri);
                Mat warp_dst = Mat.Zeros(SrcImage.Rows + Vertical, SrcImage.Cols + Horizontal, SrcImage.Type());

                Cv2.WarpAffine(SrcImage, warp_dst, warp_mat, warp_dst.Size());

                var hBitmap = warp_dst.ToBitmap().GetHbitmap();
                var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(
                                    hBitmap, IntPtr.Zero, Int32Rect.Empty,
                                    BitmapSizeOptions.FromEmptyOptions());

                ImageModel model = new ImageModel()
                {
                    Image = bitmapSource,
                    Tag = "仿射变换_平移"
                };
                ImageList.Add(model);
                ImageSource = bitmapSource;
                ImageIndex = ImageList.Count - 1;

                GDIHelper.DeleteObject(hBitmap);

                SrcImage = warp_dst;
                Reecord("仿射变换_平移");
            }
        }

        private void LoadImage()
        {
            OpenFileDialog file = new OpenFileDialog();
            file.ShowDialog();
            if (file.FileName != null && file.FileName != "")
            {
                BitmapImage bi = new BitmapImage();
                bi.BeginInit();
                bi.UriSource = new Uri(file.FileName, UriKind.Absolute);
                bi.EndInit();

                ImageModel model = new ImageModel()
                {
                    Image = bi,
                    Tag = "原始图像"
                };
                ImageList.Add(model);
                Reecord("加载图像");
                //SrcImage = new Mat(file.FileName, ImreadModes.AnyColor);
            }
        }

        private void ClearImage()
        {
            if (ImageList != null || ImageList.Count > 0)
            {
                ImageList.Clear();
                ImageSource = null;
            }
        }

        private void UpdateImage(BitmapSource source)
        {
            ImageSource = source;
            Bitmap bitmap;
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
            {
                BitmapEncoder encoder = new BmpBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(source));
                encoder.Save(ms);
                bitmap = new Bitmap(ms);
            }
            SrcImage = BitmapConverter.ToMat(bitmap);
        }

        private void Reecord(string content)
        {
            string log = DateTime.Now.ToString("hh:mm:ff") + "\t" + content + "\n";
            LogContent += log;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351

写在结尾

这篇文章,作为实战分享文章,希望能够帮助到正在写WPF的朋友么,如果有什么问题也可以留言或者私信我

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/81348
推荐阅读
相关标签
  

闽ICP备14008679号