2

私は WPF アプリケーションに取り組んでいますが、少し問題があります。

私は1つのトグルボタンと1つのテキストボックスを持っています。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>
4

1 に答える 1

1

実際、WPF のスタイルは互いに分離されており、設定セッターの集まりにすぎません。2 つの異なるビジュアル ツリーを持つ、コントロールの 2 つの異なるスタイルと言えます。TextBoxそのため、アクセスするためにスタイルを設定しようToggleButtonとしても、ビジュアル ツリーが no であるため、機能しませんToggleButtons

ビジュアル ツリー内の要素、特にコントロールを編集するための WPF では、テンプレート コントロールまたは 1 つのビュー内に配置されたコントロールを使用しますStyle(ただし、これは通常DataTemplate、 やなどのテンプレートを使用して行われます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 に答える