繁体   English   中英

WPF对LostFocus文本框的操作

[英]WPF action on LostFocus textbox

我正在使用WPF应用程序,但有一个小问题。

我有1个ToggleButton和1个TextBox。 当我单击ToggleButton时,TextBox消失并获得焦点。 很好 但是现在我想要当我单击另一个文本框或其他地方时,该文本框失去他的注意力并消失了。 我尝试使用Differnet触发器和设置器进行此操作,但无法使其正常工作。

我的代码现在:

  <ToggleButton x:Name="SearchButton" Width="100" Height="100" BorderThickness="0"  Margin="580,0,0,0" Template="{DynamicResource ButtonBaseControlTemplate1}" Panel.ZIndex="1">
        <ToggleButton.Style>
            <Style TargetType="ToggleButton">
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding IsChecked, ElementName=SearchButton}" Value="True" />
                            <Condition Binding="{Binding Visibility, ElementName=SearchBox}" Value="Visible"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=SearchBox}" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </ToggleButton.Style>
    </ToggleButton><TextBox x:Name="SearchBox" Margin="100,33,0,34" Visibility="{Binding IsChecked, ElementName=SearchButton, Converter={StaticResource BoolVisibilityConverter}}" Opacity="0" FontSize="24" FontFamily="Arial" Background="{x:Null}" Foreground="#FF7F7F7F" BorderThickness="0">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <Trigger Property="TextBox.IsFocused" Value="False">
                        <Setter Property="ToggleButton.IsChecked" Value="False" TargetName="SearchButton" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

实际上,WPF中的样式彼此分离,这只是一堆设置设置器。 我们可以说,两种不同的控件样式,以及两种不同的可视树。 因此,当您尝试设置TextBox样式以访问ToggleButton它将不起作用,因为它的可视树没有ToggleButtons

在WPF中,用于编辑可视树中的元素,尤其是控件,使用一个或多个模板控件放置在一种Style视图中(但这通常是借助模板(例如DataTemplateControlTemplate )来完成的。

我认为它适合控制Expander 它已经具有ToggleButton和内容。 例:

XAML

<Expander Header="SearchButton">
    <TextBox Text="SearchBox: Opened" Background="Gainsboro" />
</Expander>

产量

在此处输入图片说明

要更改Expander的视图,您需要更改其Style 使用它,您可以设置任何形式和控件视图。

有关更多信息,请参见:

MSDN中的扩展器

MSDN中的样式和模板

通过使用ControlTemplate自定义现有控件的外观

数据模板概述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM