Ada*_*kis 24 silverlight wpf binding
如果控件B被隐藏,我想让Control A可见,反之亦然.现在我有这个转换器:
public class InvertVisibilityConverter : IValueConverter {
public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) {
if (targetType == typeof(Visibility)) {
Visibility vis = (Visibility)value;
return vis == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
}
throw new InvalidOperationException("Converter can only convert to value of type Visibility.");
}
public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) {
throw new Exception("Invalid call - one way only");
}
}
Run Code Online (Sandbox Code Playgroud)
而这个XAML:
<Button Visibility="{Binding ElementName=btn1, Path=Visibility, Converter={StaticResource InvertVisibilityConverter}}">Btn2</Button>
Run Code Online (Sandbox Code Playgroud)
哪个有效.我只是想知道在WPF/Silverlight中是否有更直接的方法来实现这一目标?我不介意有转换器,我只是想确保没有更好的方法我不知道.
Fre*_*lad 24
在这种情况下,您可以使用触发器来完成.两个按钮的示例
<Button Name="button1">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=button2, Path=Visibility}" Value="Visible">
<Setter Property="Button.Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button Name="button2"/>
Run Code Online (Sandbox Code Playgroud)
最重要的是,我认为你正在做的事情没有问题.
也就是说,如果控件A绑定的ViewModel中有一个属性来控制其可见性,我会将Control B绑定到同一属性并通过单独的转换器反转visibily.我不确定我能说清楚原因,但这对我来说似乎更自然(至少代替你正在做的任何其他背景).