2

TextBox には次のスタイルがあります。

<Style x:Key="RenamingTextBox" TargetType="{x:Type TextBox}">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Grid>
                            <TextBlock x:Name="block" Visibility="Visible" Text="{TemplateBinding Text}" Margin="0"/>
                            <TextBox x:Name="box" Visibility="Collapsed" 
                                     Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                     Margin="1.25"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsRenaming}" Value="true">
                                <DataTrigger.Setters>
                                    <Setter TargetName="block" Property="TextBox.Visibility" Value="Collapsed" />
                                    <Setter TargetName="box" Property="TextBox.Visibility" Value="Visible" />
                                    <Setter TargetName="box" Property="FocusManager.FocusedElement" Value="{Binding ElementName=box}" />
                                    <Setter TargetName="box" Property="behaviors:TextBoxBehavior.SelectAll" Value="True"/>
                                </DataTrigger.Setters>
                            </DataTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>

また:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Margin" Value="5" />
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="BorderBrush" Value="LightGray" />
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" 
                    Value="{Binding RelativeSource={RelativeSource Self},
                    Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

テキストボックスの名前変更はうまく機能し、TextBox から TextBlock に問題なく変更されます。私の名前にエラーがある場合でも、素敵な赤い境界線が表示されます。問題は、エラーのあるテキスト ボックスにカーソルを合わせたときにツールヒントが表示されないことです。プロジェクト内の他のすべての TextBoxes は正常に動作します。何か案は?

4

1 に答える 1

4

renamingTextBox は、複数のスタイルを取得できないため、2 番目のスタイルを受け取りません。

名前を変更する textBox スタイルに「デフォルト」の TextBox スタイルを次のBasedOn属性で含めるだけです。

<Style TargetType="{x:Type TextBox}">
  ...
</Style>

<Style x:Key="RenamingTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
  ...
</Style>
于 2012-04-24T15:46:52.050 に答える