Как связать более одного свойства элемента с элементом в wpf?
<Grid x:Name="LayoutRoot">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Content="Button" Width="112" Height="50" Visibility="{Binding IsFocused, ElementName=textBox1,Converter={StaticResource MyConverter1}}"/>
</StackPanel>
<TextBox Height="57" HorizontalAlignment="Left" Margin="144,103,0,0" Name="textBox1" VerticalAlignment="Top" Width="98" />
<TextBox Height="57" HorizontalAlignment="Left" Margin="277,103,0,0" x:Name="textBox2" VerticalAlignment="Top" Width="88" />
<TextBox Height="57" HorizontalAlignment="Left" Margin="390,103,0,0" x:Name="textBox3" VerticalAlignment="Top" Width="87" />
</Grid>
С приведенным выше кодом я могу следующий результат.
Если щелкнуть кнопку textBox1, то при нажатии кнопки textBox2 и textBox3 кнопка будет скрыта.
Что мне нужно, всякий раз, когда я нажимаю textBox1 и texBox3, кнопка должна быть скрыта. что я имею в виду с выше линии,
<Button Content="Button" Width="112" Height="50" Visibility="{Binding IsFocused, ElementName=textBox1 or textBox3,Converter={StaticResource MyConverter1}}"/>
Это возможно?
1 ответ
Решение
Одним из подходов будет использование MultiBinding
вместе с IMultiValueConverter
реализация.
Важные части конвертера будут выглядеть примерно так:
public class MultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter,
CultureInfo culture)
{
return values.Cast<bool>().Any(x => x) ?
Visibility.Collapsed : Visibility.Visible;
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Использование будет таким:
<Button Content="Button" Width="112" Height="50"
Margin="196,186,195,75">
<Button.Visibility>
<MultiBinding Converter="{StaticResource MultiConverter}">
<Binding ElementName="textBox1" Path="IsFocused" />
<Binding ElementName="textBox3" Path="IsFocused" />
</MultiBinding>
</Button.Visibility>
</Button>