2

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

我有 1 个切换按钮和 1 个文本框。当我单击 ToggleButton 时,TextBox 出现并获得焦点。这很好。但是现在我希望当我单击另一个文本框或其他地方时,文本框会失去焦点并消失。我用不同的触发器和设置器试过这个,但不能让它工作。

我现在的代码:

  <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>
4

1 回答 1

1

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

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

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

XAML

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

输出

在此处输入图像描述

要改变看法Expander,就需要改变他Style。有了它,您可以设置任何形式和视图的控件。

有关更多信息,请参阅:

MSDN 中的扩展器

MSDN 中的样式和模板

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

数据模板概述

于 2013-08-12T10:41:59.397 回答