2

検証ステータスに応じて、テキスト ボックスに特定のテキストをツール ヒントとして表示したいと考えています。これを行うには、現在次のコードを使用しており、機能します。

<TextBox Name="textBox1">
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="False">
                    <Setter Property="ToolTip" Value="{Binding XPath=HelpText/Description, Mode=OneTime}" />
                </Trigger>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

エラーがない場合は xml ファイルから読み込んだ説明テキストが表示され、エラーがある場合は検証エラー文字列が表示されます。

問題は、このスタイルをコピーしてすべてのテキスト ボックスに適用する必要があることです (そして XPath を変更します。テキスト ボックスごとに一意です)。次のように、すべてのテキスト ボックスで参照するだけです。

<TextBox Name="textBox2" Style="{StaticResource TextBoxStyle}" />

ただし、XPath はテキストボックスごとに異なるため、自分のスタイルを Window.Resources に配置することはできません。スタイルでインスタンス固有の XPath を使用できるようにするにはどうすればよいですか? 新しいテキスト ボックスを作成して TextBox から派生させずにこれを行う方法はありますか? この場合、添付プロパティを使用できるかどうか疑問に思っていましたが、それらがどのように機能するかわかりません。

前もって感謝します。

4

2 に答える 2

2

これを完全にテストしたわけではありませんが、次のような添付プロパティを使用できます。

class ToolTipHelper {
    public static readonly DependencyProperty ToolTipProperty =
            DependencyProperty.RegisterAttached("ToolTip", typeof(string) ...

次に、トリガーを変更します。

<Trigger Property="Validation.HasError" Value="False">
  <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(ToolTipHelper.ToolTip}, Mode=OneTime}" />
</Trigger>

そして、あなたはそれを次のように使用します

<TextBox ToolTipHelper.ToolTip="{Binding XPath=HelpText/Description, Mode=OneTime}" />
于 2013-04-17T13:37:00.953 に答える
0

Tag プロパティを使用して、スタイルを次のように変更できます。

<Style TargetType="{x:Type TextBox}">
    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}" />
    <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>

XPath次に、必要なものをそれぞれの特定のTagプロパティにバインドしますTextBox

<TextBox Tag="{Binding XPath=HelpText/Description, Mode=OneTime}" />
于 2013-04-17T13:34:43.117 に答える