我有一个包含两个StackPanel的页面,每个包含一个TextBox和一个Button:
<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
这是我为这三个处理程序编写的当前代码:
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
代码?有没有其他的方法来编写这个代码?我是一个完全的初学者,所以我可能想不出正确的方法。
2条答案
按热度按时间m3eecexj1#
您只需绑定到Xaml中的
TextBox.IsFocused
属性,然后使用BooleanToVisibilityConverter
来显示/隐藏按钮。示例:
ttvkxqim2#
每个元素都有一个Visibility标记,默认情况下为“Visible”,但您可以指定“Hidden”或“Collapsed”,如下所示: