Как добавить элемент в список просмотра WindowsXamlHost? - PullRequest
1 голос
/ 01 апреля 2020

Я пытался добавить элемент в WindowsXamlHost, для которого InitialTypeName установлено в Windows.UI.Xaml.Controls.ListView. Я пытаюсь добавить элемент в просмотр списка WindowsXamlHost.

Вот мой код:

List<string> listFiles = new List<string>();

OpenFileDialog openFileDialog = new OpenFileDialog() { DereferenceLinks = false };

        private void AddItem_Click(object sender, RoutedEventArgs e)
        {



            if (openFileDialog.ShowDialog() == true)
            {
                foreach(String myfile in openFileDialog.FileNames)
                {

                    //get filename
                    string filename = System.IO.Path.GetFileName(myfile);

                    if (Path.GetExtension(myfile) == ".lnk")
                    {
                        try
                        {
                            var iconmyfile = GetShortcutTargetFile(myfile);
                            Icon icon1 = System.Drawing.Icon.ExtractAssociatedIcon(iconmyfile);
                            Bitmap icon = icon1.ToBitmap();

                            StackPanel sp = new StackPanel();



                            listView.Items.Add(sp);

                            sp.Height = 35;
                            sp.Width = listView.Width;
                            sp.Orientation = Orientation.Horizontal;
                            sp.VerticalAlignment = VerticalAlignment.Center;

                            System.Windows.Controls.Image image = new System.Windows.Controls.Image();
                            image.Source = BitmapToImageSource(icon);
                            sp.Children.Add(image);

                            TextBlock label = new TextBlock();
                            label.VerticalAlignment = VerticalAlignment.Center;


                            label.Text = "  " + filename.Remove(filename.Length - 4);
                            label.FontSize = 17;

                            sp.Children.Add(label);
                        }
                        catch
                        {
                            MessageBox.Show("It seems that the shortcut file that you have chosen has no target location. Please select another file.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                    else
                    {

                        Icon icon1 = System.Drawing.Icon.ExtractAssociatedIcon(myfile);
                        Bitmap icon = icon1.ToBitmap();

                        StackPanel sp = new StackPanel();

                        listView.Items.Add(sp);

                        sp.Height = 35;
                        sp.Width = listView.Width;
                        sp.Orientation = Orientation.Horizontal;
                        sp.VerticalAlignment = VerticalAlignment.Center;

                        System.Windows.Controls.Image image = new System.Windows.Controls.Image();
                        image.Source = BitmapToImageSource(icon);
                        sp.Children.Add(image);

                        TextBlock label = new TextBlock();
                        label.VerticalAlignment = VerticalAlignment.Center;


                        label.Text = "  " + filename.Remove(filename.Length - 4);
                        label.FontSize = 17;

                        sp.Children.Add(label);
                    }

                    //TODO: write text documents to directory and get the file name





                }
            }
        }

Этот код отлично работает с обычным WPF ListView. Однако, когда я пытаюсь использовать этот код с WindowsXamlHost ListView от островов XAML, он говорит, что «WindowsXamlHost не содержит определения для« Items ».»

Может ли кто-нибудь мне помочь?

Спасибо

1 Ответ

1 голос
/ 01 апреля 2020

Вы должны преобразовать свойство Child WindowsXamlHost в Windows.UI.Xaml.Controls.ListView (или любое другое значение, установленное для InitialTypeName), прежде чем пытаться получить доступ к свойству Items:

var uwpListView = listView.Child as Windows.UI.Xaml.Controls.ListView;
uwpListView.Items.Add(...);

Вам, вероятно, следует также переименовать WindowsXamlHost во что-то лучшее, чем "listView". В конце концов, это просто хост для управления UWP.

...