У дизайнера форм WPF есть проблемы с моим XAML.Пожалуйста помоги - PullRequest
1 голос
/ 15 июня 2011

Я изучаю WPF и XAML. Вот мой код формы XAML и код моего класса (ListboxMenuItem)

<Window x:Class="Bail.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace:Bail"
    Title="MainWindow" Height="768" Width="1024" WindowStartupLocation="CenterScreen"
    Closing="Window_Closing" ResizeMode="NoResize">
    <Grid>
        <Grid.Resources> 
            <src:ListboxMenuItems x:Key="ListboxMenuItems"/>
        </Grid.Resources>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="185" />
            <!-- Or Auto -->
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>


        <ListBox Width="150" Margin="0,5,0,10" Grid.Column="0"
                 ItemsSource="{StaticResource ListboxMenuItems}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Padding="5,0,5,0" Text="{Binding FirstName}" />
                        <TextBlock Text="{Binding LastName}" />
                        <TextBlock Text=", " />
                        <TextBlock Text="{Binding Address}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>            
        </ListBox>


        <Canvas Grid.Column="1" />
    </Grid>
</Window>

Вот ошибки


после исправления xmlns: src я получаю следующее Внимание:

Предупреждение 1 '' src '- это необъявленный префикс. Строка 8, позиция 14. XML недействителен. C: \ Залог \ Залог \ Залог \ MainWindow.xaml 8 14 Залог

Ошибка относится к этой строке в XAML (<src:ListboxMenuItems x:Key="ListboxMenuItems"/>)

ListBoxMenuItems - это класс, который я создал в C #.

Вот код класса

//FileName: ListboxMenuItems.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Bail
{
    public class ListboxMenuItem
    {
        public String FirstName { get; set; }
        public String LastName { get; set; }
        public String Address { get; set; }

        public ListboxMenuItem(String firstName, String lastName, String address)
        {
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Address = address;
        }
    }

    class ListboxMenuItems 
    { 
        List<ListboxMenuItem> Items { get; private set; } 
        public ListboxMenuItems() 
        { 
            Items = new List<ListboxMenuItem>(); 
            Items.Add(new ListboxMenuItem("Michael", "Anderberg", "12 North Third Street, Apartment 45")); 
            Items.Add(new ListboxMenuItem("Chris", "Ashton", "34 West Fifth Street, Apartment 67")); 
            Items.Add(new ListboxMenuItem("Cassie", "Hicks", "56 East Seventh Street, Apartment 89")); 
            Items.Add(new ListboxMenuItem("Guido", "Pica", "78 South Ninth Street, Apartment 10")); 
        } 
    }
}

Ответы [ 3 ]

3 голосов
/ 15 июня 2011

ваше объявление xmlns вверху должно включать src:

XMLNS: SRC = "CLR-имен: Бейл"

Кроме того, похоже, что вам нужно указать свой ItemsSource вашего ListBox на Items внутри вашего класса. Я бы предложил изменить ваш класс так, чтобы он просто наследовал от List и покончил со свойством Items:

class ListboxMenuItems : List<ListboxMenuItem>
{ 
    public ListboxMenuItems() 
    { 
        Add(new ListboxMenuItem("Michael", "Anderberg", "12 North Third Street, Apartment 45")); 
        Add(new ListboxMenuItem("Chris", "Ashton", "34 West Fifth Street, Apartment 67")); 
        Add(new ListboxMenuItem("Cassie", "Hicks", "56 East Seventh Street, Apartment 89")); 
        Add(new ListboxMenuItem("Guido", "Pica", "78 South Ninth Street, Apartment 10")); 
    } 
}

Это должно заставить его работать.

1 голос
/ 15 июня 2011

Строка

xmlns="clr-namespace:Bail" 

должна быть изменена на

xmlns:src="clr-namespace:Bail"

Редактировать:

После создания ListboxMenuItems Class IEnumerable и IEnumeratorУ меня работает код:

//FileName: ListboxMenuItems.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Bail
{
    public class ListboxMenuItem
    {
        public String FirstName { get; set; }
        public String LastName { get; set; }
        public String Address { get; set; }

        public ListboxMenuItem(String firstName, String lastName, String address)
        {
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Address = address;
        }
    }

    public class ListboxMenuItems : IEnumerable, IEnumerator
    {
        List<ListboxMenuItem> Items { get; set; }

        private int _position = -1;
        public ListboxMenuItems()
        {
            Items = new List<ListboxMenuItem>();
            Items.Add(new ListboxMenuItem("Michael", "Anderberg", "12 North Third Street, Apartment 45"));
            Items.Add(new ListboxMenuItem("Chris", "Ashton", "34 West Fifth Street, Apartment 67"));
            Items.Add(new ListboxMenuItem("Cassie", "Hicks", "56 East Seventh Street, Apartment 89"));
            Items.Add(new ListboxMenuItem("Guido", "Pica", "78 South Ninth Street, Apartment 10"));
        }

        #region Implementation of IEnumerable

        /// <summary>
        /// Returns an enumerator that iterates through a collection.
        /// </summary>
        /// <returns>
        /// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
        /// </returns>
        /// <filterpriority>2</filterpriority>
        public IEnumerator GetEnumerator()
        {
            return this;
        }

        #endregion

        #region Implementation of IEnumerator

        /// <summary>
        /// Advances the enumerator to the next element of the collection.
        /// </summary>
        /// <returns>
        /// true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.
        /// </returns>
        /// <exception cref="T:System.InvalidOperationException">The collection was modified after the enumerator was created. </exception><filterpriority>2</filterpriority>
        public bool MoveNext()
        {
            _position++;
            return (_position < Items.Count);
        }

        /// <summary>
        /// Sets the enumerator to its initial position, which is before the first element in the collection.
        /// </summary>
        /// <exception cref="T:System.InvalidOperationException">The collection was modified after the enumerator was created. </exception><filterpriority>2</filterpriority>
        public void Reset()
        {
            _position = -1;
        }

        /// <summary>
        /// Gets the current element in the collection.
        /// </summary>
        /// <returns>
        /// The current element in the collection.
        /// </returns>
        /// <exception cref="T:System.InvalidOperationException">The enumerator is positioned before the first element of the collection or after the last element.</exception><filterpriority>2</filterpriority>
        public object Current
        {
            get
            {
                try
                {
                    return Items.ElementAt(_position);
                }
                catch (IndexOutOfRangeException)
                {
                    throw new InvalidOperationException();
                }
            }
        }

        #endregion
    }
}
0 голосов
/ 15 июня 2011

src не определен как префикс пространства имен в вашем файле XAML.

Возможно, вам нужно изменить строку 4 на:

xmlns:src="clr-namespace:Bail"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...