我正在研究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>
答案 0 :(得分:1)
事实上,WPF中的样式彼此分离,它只是一堆设置设置器。我们可以说,两种不同的控件样式,有两种不同的可视树。因此,当您尝试设置TextBox
样式以访问ToggleButton
时,它不起作用,因为它的可视树没有ToggleButtons
。
在WPF中用于编辑可视化树中的元素,特别是控件,使用模板控件或放置在一个Style
视图中的控件(但这通常是在模板的帮助下完成的,例如{{ 1}},或DataTemplate
)。
我认为它适合你控制ControlTemplate
。它已经有Expander
和内容。例如:
XAML
ToggleButton
输出
要更改<Expander Header="SearchButton">
<TextBox Text="SearchBox: Opened" Background="Gainsboro" />
</Expander>
的视图,您需要更改其Expander
。有了它,您可以设置任何形式和控制视图。
有关详细信息,请参阅:
Styling and Templating in MSDN
Customizing the Appearance of an Existing Control by Using a ControlTemplate