2013-08-12 36 views
2

我正在研究WPF应用程序,并且遇到了一些问题。关于LostFocus文本框的WPF操作

我有1个ToggleButton和1个TextBox。当我点击ToggleButton,TextBox apears并获得焦点。这很好。但是现在我希望当我点击另一个文本框或其他地方时,该文本框失去了他的注意力和消散。我尝试过使用Differnet触发器和setter,但无法使其工作。

我现在代码:

<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> 
+0

你需要做到这一点没有代码隐藏? – JMK

+0

好吧,我更喜欢它,但如果我需要使用它,那么没有问题。 – user2499088

+1

你可以展示一个完整的例子吗?对我来说,建设'IsFocused =“假”'工程。 –

回答

1

的事实,即在WPF的风格相互分离,它只是一堆的设置制定者。我们可以说,两种不同的控制风格,有两种不同的视觉树。因此,当您尝试设计TextBox以访问ToggleButton时,它不起作用,因为其视觉树号为ToggleButtons

在WPF在可视树编辑组件,并且特别地控制,用于放置在视图中的一个Style的模板对照或对照(但这通常与模板的帮助下完成,例如DataTemplate,或与ControlTemplate )。

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

XAML

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

输出

enter image description here

要改变Expander认为,需要改变他的Style。有了它,你可以设置任何形式和控制视图。

欲了解更多信息,请参阅:

Expander in MSDN

Styling and Templating in MSDN

Customizing the Appearance of an Existing Control by Using a ControlTemplate

Data Templating Overview

+0

扩展器非常棒!但是,当文本框失去焦点时,我怎么能让它全部折叠呢? – user2499088

+0

@ user2499088:你的意思是,如果'Expander'失去焦点,然后关闭它? –