1

どうすればこのようなことをできますか

<BooleanToVisibilityConverter x:Key="BoolToVis"/>

<WrapPanel>
     <TextBlock Text="{Binding ElementName=ConnectionInformation_ServerName,Path=Text}"/>
     <Image Source="Images/Icons/Select.ico" Margin="2" Height="15" Visibility="{Binding SQLConnected,Converter={StaticResource BoolToVis},ConverterParameter=true}"/>
     <Image Source="Images/Icons/alarm private.ico" Margin="2" Height="15" Visibility="{Binding SQLConnected,Converter={StaticResource BoolToVis},ConverterParameter=false}"/>
</WrapPanel>

ブール値から vis へのコンバーターを使用する方法はありますが、C でメソッド全体を記述せずに反転させる方法はありますか? または、これらの画像を重ねて、必要なときに非表示にする必要がありますか?

4

2 に答える 2

7

私の知る限り、これには独自の実装を作成する必要があります。これが私が使用するものです:

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool boolValue = (bool)value;
        boolValue = (parameter != null) ? !boolValue : boolValue;
        return boolValue ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

そして、私は通常ConverterParameter='negate'、パラメーターが何をしているのかがコードで明確になるように設定します。ConverterParameter を指定しないと、コンバーターは組み込みの BooleanToVisibilityConverter のように動作します。使用法を機能させたい場合は、もちろん、使用して ConverterParameter を解析し、bool.TryParse()それに反応することができます。

于 2014-02-22T07:12:35.650 に答える
1

@K Mehta ( https://stackoverflow.com/a/21951103/1963978 ) から、Windows 10 ユニバーサル アプリケーションのメソッド シグネチャが若干更新されています (「CultureInfo カルチャ」から「文字列言語」への変更、https:// msdn.microsoft.com/en-us/library/windows/apps/xaml/hh701934.aspx ) :

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, string language)
    {
        bool boolValue = (bool)value;
        boolValue = (parameter != null) ? !boolValue : boolValue;
        return boolValue ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, string language)
    {
        throw new NotImplementedException();
    }
}
于 2015-07-16T17:54:57.683 に答える