0
<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をクリックするボタンが非表示になります。

必要なのは、textBox1texBox3をクリックするたびに、ボタンを非表示にする必要があります。上記の行の意味は、

<Button Content="Button" Width="112" Height="50" Visibility="{Binding IsFocused, ElementName=textBox1 or textBox3,Converter={StaticResource MyConverter1}}"/>

これは可能ですか?

4

1 に答える 1

2

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>
于 2013-02-18T10:40:41.313 に答える