Ресурс Wpf: «Неизвестная ошибка сборки, путь не может быть пустым ...» - PullRequest
0 голосов
/ 14 мая 2010

Ниже приведен фрагмент из xaml, определяющий DataGrid в элементе управления, определяющий селектор шаблона.

<DataGrid.Resources>
    <selector:CurrencyColorSelector x:Key="currencyColorSelector">
        <selector:CurrencyColorSelector.NegativeTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Balance, StringFormat=n}" Background="Red"/>
            </DataTemplate>
        </selector:CurrencyColorSelector.NegativeTemplate>
        <selector:CurrencyColorSelector.NormalTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Balance, StringFormat=n}"/>
            </DataTemplate>
        </selector:CurrencyColorSelector.NormalTemplate>
    </selector:CurrencyColorSelector>
</DataGrid.Resources>

Теперь выдается ошибка: «Неизвестная ошибка сборки,« Путь не может быть пустым. Имя параметра: путь Строка 27, Позиция 79 ».« »(Ошибка проверки компилятором или xaml).

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

После перезагрузки Visual Studio 2010 я получаю следующее:

Тег 'CurrencyColorSelector' не существует в пространстве имен XML 'clr-namespace: EveTrader.Wpf.Selectors; assembly = EveTrader.Wpf'. Строка 27, позиция 18.

Что делает его еще более странным, поскольку у меня даже есть интеллект для класса.


Я понятия не имею, откуда взялся этот Путь, и мой пример ничего не показывает. Если дважды щелкнуть ошибку, она указывает на конец <selector:CurrencyColorSelector x:Key="currencyColorSelector"> (строка 27).

Кто-нибудь сталкивался с такой проблемой и имеет решение для нее? Пример был отсюда: http://www.wpftutorial.net/DataGrid.html (Подробности строк в зависимости от типа данных)

Разъяснение

Это под .net 4.0. Проблема связана с CurrencyColorSelector, так как сами шаблоны работают нормально, если используются в DataGridTemplateColumn самостоятельно. CurrencyColorSelector происходит от DataTemplateSelector.

CurrencyColorSelector

namespace EveTrader.Wpf.Selectors
{
    public class CurrencyColorSelector : DataTemplateSelector
    {
        public DataTemplate NegativeTemplate { get; set; }
        public DataTemplate NormalTemplate { get; set; }

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            var data = item as DisplayWallets;

            if (data == null)
                return base.SelectTemplate(item, container);

            if (data.Balance < 0m)
                return NegativeTemplate;
            return NormalTemplate;
        }
    }
}

DisplayWallets

public class DisplayWallets
{
    public string Name { get; set; }
    public decimal Balance { get; set; }
}

Определение селектора Xaml

<UserControl x:Class="EveTrader.Wpf.WalletsView"
             xmlns:selector="clr-namespace:EveTrader.Wpf.Selectors;assembly=EveTrader.Wpf">

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Хорошо, я исправил это. Проблема была в определении селектора:

xmlns:selector="clr-namespace:EveTrader.Wpf.Selectors;assembly=EveTrader.Wpf".

Поскольку тип CurrencyColorSelector находится в сборке EveTrader.Wpf, это определение создало циклическую ссылку, которая вызвала ошибку - компилятор попытался скомпилировать сборку EveTrader.Wpf, но из-за определения selector он попытался сначала создайте EveTrader.Wpf. Это продолжалось до тошноты. Исправление простое: удалите определение сборки: xmlns:selector="clr-namespace:EveTrader.Wpf.Selectors".

Я исправил эту проблему после нескольких часов сна после работы в течение ночи, что снова доказывает, что сон необходим. В любом случае спасибо Игорю за помощь.

0 голосов
/ 14 мая 2010

Path в Binding - это обычно бит, следующий за словом Binding.

{Binding MyCustomText}
          ^
          |
        Binding

<!--OR-->

{Binding Path=MyCustomText}
               ^
               |
             Binding

Эта ошибка означает, что с привязкой что-то не так.

StringFormat Свойство привязки было введено в пакете обновления для .NET 3.5 из памяти. Хороший способ проверить, поддерживает ли ваша версия WPF StringFormat, - узнать, есть ли у класса BindingBase свойство StringFormat.

С обновленной информацией у меня ничего нет :( Похоже, должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...