Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当图像可见时,如何将可见性设置为“在图像上折叠”_C#_Wpf_Xaml_User Controls - Fatal编程技术网

C# 当图像可见时,如何将可见性设置为“在图像上折叠”

C# 当图像可见时,如何将可见性设置为“在图像上折叠”,c#,wpf,xaml,user-controls,C#,Wpf,Xaml,User Controls,我在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" Heig

我在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>
显然,这是一个相当愚蠢的方法,所以我想知道,当其中一个设置为“在代码背后可见”时,如何使图像折叠?这就是我到目前为止的想法:

<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>

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

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;
}

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

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;
}

如果要使用数据绑定,可以使用将箭头方向映射到可见性值的转换器:

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}" .../>

....

其中
ArrowDirection
指定
ElementInfoCollection[pos]的绑定路径。ArrowDirection
。如果它实现了
INotifyPropertyChanged
,则只需将此值设置为正确的方向,即可更新可见性。

如果要使用数据绑定,可以使用将箭头方向映射到可见性值的转换器:

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}" .../>

....

其中
ArrowDirection
指定
ElementInfoCollection[pos]的绑定路径。ArrowDirection
。如果它实现了
INotifyPropertyChanged
,只需将此值设置为正确的方向,即可更新可见性。

是否使用MVVM模式?否。在我的情况下不需要MVVM如果
ElementInfoCollection[pos].ArrowDirection
可以作为视图类中的依赖属性隔离,您可以使用绑定到
IValueConverter
进行
ArrowDirection
-到-
可见性的转换。是否使用MVVM模式?不,我没有。在我的情况下不需要MVVM如果
ElementInfoCollection[pos].ArrowDirection
可以作为视图类中的依赖属性隔离,则可以使用绑定到
IValueConverter
进行
ArrowDirection
-到-
可见性的转换。