3

それぞれ 1 つの TextBox と 1 つの Button を含む 2 つの StackPanels を含むページがあります。

<StackPanel x:Name="Row1">
<TextBox x:Name="TextBox1" Text="" GotFocus="OnFocusHandler" LostFocus="OffFocusHandler"/>
<Button x:Name="Button1" Content="Convert" Click="OnClickHandler" Visibility="Collapsed"/>
</StackPanel>

<StackPanel x:Name="Row2">
<TextBox x:Name="TextBox2" Text="" GotFocus="OnFocusHandler" LostFocus="OffFocusHandler"/>
<Button x:Name="Button2" Content="Convert" Click="OnClickHandler" Visibility="Collapsed"/>
</StackPanel>

私は次のことをしたいと思います:

  • テキストボックスにフォーカスがある場合、他のテキストボックスを非表示にし、対応するボタンを表示する必要があります
  • テキストボックスの焦点が外れると、元の表示に戻ります: 空のテキストボックスのみが表示されます
  • ボタンが OffFocusHandler をトリガーできるようにしたくない

これは、3 つのハンドラーの現在のコードです。

private void OnFocusHandler(object sender, RoutedEventArgs e)
{
    TextBox SenderTextBox = (TextBox)sender;

    if (SenderPanel.Name == "TextBox1")
    {
        Button1.Visibility = Visibility.Visible;
    }
    else if (SenderPanel.Name == "TextBox2")
    {
        Button2.Visibility = Visibility.Visible;
    }
}

private void OffFocusHandler(object sender, RoutedEventArgs e)
{
    TextBox1.Text = "";
    TextBox2.Text = "";
    Button1.Visibility = Visibility.Collapsed;
    Button2.Visibility = Visibility.Collapsed;
}

private void OnClickHandler(object sender, RoutedEventArgs e)
{
    // some stuff unrelated to my issue
}

OffFocusHandlerボタンをクリックしてコードをトリガーしないようにするにはどうすればよいですか? これをコーディングする別の方法はありますか?私は完全な初心者なので、正しい方法を考えていないかもしれません。

4

1 に答える 1

3

TextBox.IsFocusedXaml でプロパティにバインドするだけでBooleanToVisibilityConverter、ボタンを表示/非表示にできます。

例:

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication4"
       Title="MainWindow" Height="300" Width="400" Name="UI" >
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BoolTovisible" />
    </Window.Resources>

    <Grid>
        <StackPanel x:Name="Row1" Height="54" VerticalAlignment="Top">
            <TextBox x:Name="TextBox1" Text="" />
            <Button x:Name="Button1" Content="Convert" Visibility="{Binding ElementName=TextBox1, Path=IsFocused, Converter={StaticResource BoolTovisible}}"/>
        </StackPanel>

        <StackPanel x:Name="Row2" Margin="0,60,0,0" Height="51" VerticalAlignment="Top">
            <TextBox x:Name="TextBox2" Text="" />
            <Button x:Name="Button2" Content="Convert" Visibility="{Binding ElementName=TextBox2, Path=IsFocused, Converter={StaticResource BoolTovisible}}"/>
        </StackPanel>
    </Grid>
</Window>
于 2012-12-20T21:49:39.400 に答える