Ниже приведен фрагмент из 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">