2

私は WPF ベースのアプリケーションを書いていますが、それに問題があります。私は何週間も答えを探しましたが、まだ解決策を見つけることができませんでした. 問題は、ヒント付きの背景テキストを表示できないことです。私は独自のスタイルを使用して、トリガーを介してテキストを表示しようとしています。私が作成したコードサンプルは次のとおりです。

<Style TargetType="{x:Type TextBox}" x:Key="DCTextBox">           
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="FontSize" Value="14"/>
            <Setter Property="Foreground" Value="#21346b"/>
            <Setter Property="FontFamily" Value="Fonts/#BankGothic Md BT"/>            
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Border CornerRadius="5" BorderThickness="6" BorderBrush="#21346b" Background="White" >
                            <ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter> 
            <Style.Resources>
                    <VisualBrush x:Key="HelpBrush" Opacity="0.4" Stretch="None" AlignmentX="Left" >
                        <VisualBrush.Visual>
                            <TextBlock FontStyle="Italic" Text="Type or select from list" Background="Black"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
            </Style.Resources>         
            <Style.Triggers>
                <Trigger Property="Text" Value="{x:Null}">
                    <Setter Property="Control.Background" Value="{StaticResource HelpBrush}"/>
                </Trigger>
                <Trigger Property="Text" Value="">
                    <Setter Property="Control.Background" Value="{StaticResource HelpBrush}"/>
                </Trigger>
            </Style.Triggers> 
        </Style>

どこに問題があるのか​​教えてください。ああ、もう 1 つの質問: 同様の方法を使用して passwordbox の背景テキストを出力することは可能ですか? ありがとうございました!

4

2 に答える 2

0

私はいくつかの修正を行いました、そしてそれは私にとってうまくいきます。

 <Style TargetType="{x:Type TextBox}" x:Key="DCTextBox">
        <Setter Property="FontSize" Value="14"/>
        <Setter Property="Foreground" Value="#21346b"/>
        <Setter Property="FontFamily" Value="Fonts/#BankGothic Md BT"/>
        <Style.Resources>
            <VisualBrush x:Key="HelpBrush" Opacity="0.4" Stretch="None" AlignmentX="Left" >
                <VisualBrush.Visual>
                    <TextBlock FontStyle="Italic" Text="Type or select from list" Foreground="Black"/>
                </VisualBrush.Visual>
            </VisualBrush>
        </Style.Resources>
        <Style.Triggers>
            <Trigger Property="Text" Value="{x:Null}">
                <Setter Property="Background" Value="{StaticResource HelpBrush}"/>
            </Trigger>
            <Trigger Property="Text" Value="">
                <Setter Property="Background" Value="{StaticResource HelpBrush}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

それが役に立てば幸い。

于 2013-01-14T03:05:07.243 に答える
0

私が正しく理解していれば、ユーザーに何をすべきかを伝えるために、空でフォーカスされていないときにテキストを表示する TextBox が必要です。このため、TextBox から継承された新しいコントロールを作成することをお勧めします。そのため、スタイルを設定しても、アプリ内のすべての TextBox に影響を与えることはありません。DependencyProperty を追加して、XAML でヘルプ テキストを設定できるようにします。

public class MyTextBox : TextBox
{
    public static DependencyProperty LabelTextProperty =
        DependencyProperty.Register(
            "LabelText",
            typeof(string),
            typeof(MyTextBox));
 }

スタイルを定義します。この場合はこれを行います (関連する部分のみを投稿します。自分できれいに見せることができます)。

 <Style x:Key="{x:Type local:MyTextBox}" TargetType="{x:Type local:MyTextBox}">
 <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyTextBox}">

     <ControlTemplate.Triggers>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter Property="Visibility" TargetName="LabelText" Value="Hidden" />
                    </Trigger>
                    <Trigger Property="HasText" Value="True">
                        <Setter Property="Visibility" TargetName="LabelText" Value="Hidden" />
                    </Trigger>
     </ControlTemplate.Triggers>
           </ControlTemplate>
 </Setter.Value>
 </Style>

次のように使用します。

<Local:MyTextBox LabelText="This is the tip for the user" Text="{Binding SomeProperty}"/>

パスワードボックスに関しては試していませんが、問題なく動作するはずです。LabelText が「xxxxxxxxx」と表示されている場合は、回避策が見つかるはずです (思いがけず、PasswordBox 内に TextBlock タイプの DependencyProperty を作成し、その内容を Tip 文字列で設定し、/全体を示しています)。

最後に 1 つの提案: テキストを表示したいだけの場合に VisualBrush を使用して費用をかけないでください。これがお役に立てば幸いです。

于 2013-01-14T00:47:55.453 に答える