WPF对LostFocus文本框的操作

时间:2013-08-12 09:41:04

标签: wpf visual-studio xaml

我正在研究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>

1 个答案:

答案 0 :(得分:1)

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

在WPF中用于编辑可视化树中的元素,特别是控件,使用模板控件或放置在一个Style视图中的控件(但这通常是在模板的帮助下完成的,例如{{ 1}},或DataTemplate)。

我认为它适合你控制ControlTemplate。它已经有Expander和内容。例如:

XAML

ToggleButton

输出

enter image description here

要更改<Expander Header="SearchButton"> <TextBox Text="SearchBox: Opened" Background="Gainsboro" /> </Expander> 的视图,您需要更改其Expander。有了它,您可以设置任何形式和控制视图。

有关详细信息,请参阅:

Expander in MSDN

Styling and Templating in MSDN

Customizing the Appearance of an Existing Control by Using a ControlTemplate

Data Templating Overview