0

我在 XAML 中有四个图像:

<Image Visibility="Collapsed" Name="LeftArrow" Height="20" Width="20"></Image>
<Image Visibility="Collapsed" Name="RightArrow" Height="20" Width="20"></Image>
<Image Visibility="Collapsed" Name="TopArrow" Height="20" Width="20"></Image>
<Image Visibility="Collapsed" Name="BottomArrow" Height="20" Width="20"></Image>

在我的代码隐藏中,我有一个开关盒,当其中一个像这样可见时,它会使所有其他图像折叠起来:

switch (ElementInfoCollection[pos].ArrowDirection)
{
    case ArrowDirection.Left:
        LeftArrow.Visibility = Visibility.Visible;
        RightArrow.Visibility = Visibility.Collapsed;
        TopArrow.Visibility = Visibility.Collapsed;
        BottomArrow.Visibility = Visibility.Collapsed;
        break;
    case ArrowDirection.Right:
        LeftArrow.Visibility = Visibility.Collapsed;
        RightArrow.Visibility = Visibility.Visible;
        TopArrow.Visibility = Visibility.Collapsed;
        BottomArrow.Visibility = Visibility.Collapsed;
        break;
    case ArrowDirection.Top:
        LeftArrow.Visibility = Visibility.Collapsed;
        RightArrow.Visibility = Visibility.Collapsed;
        TopArrow.Visibility = Visibility.Visible;
        BottomArrow.Visibility = Visibility.Collapsed;
        break;
    case ArrowDirection.Bottom:
        LeftArrow.Visibility = Visibility.Collapsed;
        RightArrow.Visibility = Visibility.Collapsed;
        TopArrow.Visibility = Visibility.Collapsed;
        BottomArrow.Visibility = Visibility.Visible;
        break;
    default:
        LeftArrow.Visibility = Visibility.Collapsed;
        RightArrow.Visibility = Visibility.Collapsed;
        TopArrow.Visibility = Visibility.Collapsed;
        BottomArrow.Visibility = Visibility.Collapsed;
        break;
}

显然,这是一种非常愚蠢的方法,所以我想知道当其中一个图像在代码隐藏中设置为可见时如何使图像折叠?到目前为止,这是我想出的:

<UserControl.Resources>
    <Style x:Key="ArrowSwitch" TargetType="{x:Type Image}">
        <Style.Triggers>
            <DataTrigger >
                <Setter Property="Image.Visibility" Value="Collapsed"></Setter>
            </DataTrigger>
            <DataTrigger>
                <Setter Property="Image.Visibility" Value="Visible"></Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
4

2 回答 2

3

这是相同的代码,但要短得多:

switch (ElementInfoCollection[pos].ArrowDirection)
{
    LeftArrow.Visibility = Visibility.Collapsed;
    RightArrow.Visibility = Visibility.Collapsed;
    TopArrow.Visibility = Visibility.Collapsed;
    BottomArrow.Visibility = Visibility.Collapsed;

    case ArrowDirection.Left: LeftArrow.Visibility = Visibility.Visible; break;
    case ArrowDirection.Right: RightArrow.Visibility = Visibility.Visible; break;
    case ArrowDirection.Top: TopArrow.Visibility = Visibility.Visible; break;
    case ArrowDirection.Bottom: BottomArrow.Visibility = Visibility.Visible; break;
    default: break;
}
于 2013-03-27T09:09:26.037 回答
1

如果要使用数据绑定,可以使用将 ArrowDirection 映射到 Visibility 值的转换器:

public class DirectionVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ArrowDirection target;
        ArrowDirection current;
        try
        {
            current = (ArrowDirection)value;
        }
        catch (Exception)
        {
            return null;
        }
        if (Enum.TryParse(parameter.ToString(), out target))
        {
            if (current == target)
                return Visibility.Visible;
            else
                return Visibility.Collapsed;
        }
        return null;
    }

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

并在 XAML 中使用它,例如:

<Window.Resources>
    <local:DirectionVisibilityConverter x:Key="VisibilityConverter"/>
</Window.Resources>
....
<Image Visibility="{Binding ArrowDirection, Converter={StaticResource VisibilityConverter}, ConverterParameter=Left}" .../>

whereArrowDirection指定ElementInfoCollection[pos].ArrowDirection. 如果它实现了INotifyPropertyChanged,您只需将此值设置为正确的方向,可见性就会更新。

于 2013-03-27T09:26:57.783 回答