C# 当图像可见时,如何将可见性设置为“在图像上折叠”
我在XAML中有四个图像: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
<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
-到-可见性的转换。