【问题标题】:Hide/Display XAML elements or block LostFocus event隐藏/显示 XAML 元素或阻止 LostFocus 事件
【发布时间】:2012-12-08 08:57:18
【问题描述】:

我有一个包含两个 StackPanel 的页面,每个 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 代码? 还有另一种编码方式吗?我是一个完全的初学者,所以我可能没有正确的想法。

【问题讨论】:

    标签: c# xaml uwp


    【解决方案1】:

    您可以在 Xaml 中绑定到 TextBox.IsFocused 属性,并使用 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>
    

    【讨论】:

    • 谢谢 sa_ddam213。但是,Windows 应用程序似乎不支持 BooleanToVisibilityConverter。我正在尝试为它找到一个等价物。如果我找到了,我会在这里通知你们。
    • 好的,即使在使用此 (kentb.blogspot.com/2011/02/booleantovisibilityconverter.html) 创建了我自己的 BooleanToVisibilityConverter 之后,我也无法使其工作。我这样添加了 BooleanToVisibilityConverter:&lt;Page.Resources&gt; &lt;common:BooleanToVisibilityConverter x:Key="BoolTovisible" /&gt; &lt;/Page.Resources&gt;
    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多