9

次のコードでポップアップを表示しています。

<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.Windows 名前空間に配置されます

これを実行すると、次の例外が発生します。

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

これを機能させるには、何を変更する必要がありますか?

4

1 に答える 1

14

マルチバインディングがコンバーターを探す場所を知らないようです。コンバーターを静的リソースとして定義しましたか?コントロールのリソースまたは含まれている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>
于 2012-04-20T03:45:17.060 に答える