2012-04-20 7 views
4

Я отображая всплывающее окно со следующим кодом:XAML не может найти конвертер класса

<Popup PlacementTarget="{Binding ElementName=categoryTagEditorControl}" 
     Placement="Bottom"> 
    <Popup.IsOpen> 
     <MultiBinding Mode="OneWay" Converter="{StaticResource BooleanOrConverter}"> 
      <Binding Mode="OneWay" ElementName="categoryTagEditorControl" Path="IsMouseOver"/> 
      <Binding RelativeSource="{RelativeSource Self}" Path="IsMouseOver" /> 
     </MultiBinding> 
    </Popup.IsOpen> 
    <StackPanel> 
     <TextBox Text="Some Text.."/> 
     <DatePicker/> 
    </StackPanel> 
</Popup> 

Вот код BooleanOrConverter:

public class BooleanOrConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     foreach (object booleanValue in values) 
     { 
      if (booleanValue is bool == false) 
      { 
       throw new ApplicationException("BooleanOrConverter only accepts boolean as datatype"); 
      } 
      if ((bool)booleanValue == true) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

и его поместили в PopupTest.InfoPanels. Окна имен

, когда я запускаю это, я получаю следующее исключение:

Cannot find resource named 'BooleanOrConverter'. Resource names are case sensitive. 

Что я должен изменить для этого?

+0

Попробуйте добавить объект вашего класса преобразователя к соответствующему словаря ресурсов, а затем использовать '' DynamicResource nakiya

ответ

9

Похоже, что ваш Multibinding не знает, где искать конвертер. Вы определили преобразователь как staticresource? Вы можете указать преобразователь в ресурсах элемента управления или в списке ResourceDictionary. Добавьте ссылку на пространство имен конвертера, а затем определите ResourceKey для него. Что-то вроде:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:converters="clr-namespace:MyConverters"> 

    <UserControl.Resources> 
      <converters:BooleanOrConverter x:Key="BoolOrConverter"/> 
    </UserControl.Resources> 

    ... // use converter as you were before 

</UserControl> 
+2

Используйте <конвертеров: BooleanOrConverter х: Key = "BooleanOrConverter" />. Изменил ключ, чтобы избежать путаницы. –