0

最近はほとんど怒ります。xamlファイルにテキストボックスとスタイルがあります。ただし、コントロールテンプレートのないスタイルは、テキストボックスで有効にすることはできません。コントロールテンプレートは機能しますが、コントロールテンプレートはテキストボックスを完全に上書きするように見えますが、デフォルトの動作では、編集、入力、選択などのテキストボックスが失われます...コントロールテンプレートを使用したxamlのコンテンツは次のとおりです。

   <Style TargetType="{x:Type TextBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border Name="tbBorder"  Background="White"  BorderThickness="0.6" BorderBrush="#B9B9B9">
                        <ContentPresenter/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="true">
                            <Setter Property="BorderBrush" Value="#4D90FE" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="BorderBrush" Value="#4D90FE" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

そして、これはまったく機能しないシンプルなスタイルです、

    <Style TargetType="{x:Type TextBox}">
       <Style.Triggers>
            <Trigger Property="IsFocused" Value="true">
                <Setter Property="BorderBrush" Value="#4D90FE" />
            </Trigger>
            <Trigger Property="IsMouseOver" Value="true">
                <Setter Property="BorderBrush" Value="#4D90FE" />
            </Trigger>
        </Style.Triggers>
    </Style>

ありがとう!

更新:テキストボックス全体のコードスニプト:

       <TextBox Height="23" HorizontalAlignment="Left" Margin="114,53,0,0" Name="textBox1" VerticalAlignment="Top" Width="150" Text="{Binding Path=TraderAccount, Mode=OneWayToSource, NotifyOnValidationError=True}" BorderBrush="#FFB9B9B9" BorderThickness="1" >
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Style.Triggers>
                        <Trigger Property="IsFocused" Value="true">
                            <Setter Property="BorderBrush" Value="Red" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="BorderBrush" Value="Red" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
4

3 に答える 3

2

スタイルセッターは私のために働いていますが、私が見ている問題は、コントロールアニメーションが設定されたばかりのスタイルをアニメーション化していることです。

完全に再定義するのではなく、元のコントロール テンプレートを抽出して再定義することをお勧めします。私が知る限り、テキスト ボックス コントロールは、コンテンツ プレゼンターとの単なる境界線よりも複雑で (コントロール テンプレートを抽出したことはありません!)、すべての状態を与えるために機能する境界線がいくつかある可能性があります。等

Blend を使用してこれを行うことができます。Blend がない場合は、コントロール テンプレートとスタイルの MSDN リソースがあります。

http://msdn.microsoft.com/en-us/library/aa970773.aspx

編集:

手始めに、再定義されたテンプレートにコンテンツ「PART」が欠落しているように見えます

<ScrollViewer Margin="0" x:Name="PART_ContentHost" />

編集2:

あなたはそれが機能しないと言っています...これは.NET Framework 4.0を使用するWPFで機能します-代わりに境界線の色を「赤」に変更して、効果を確認できることを確認し、赤を除いて確実に機能しますVisual State Manager によってコントロールの表示状態が変更されるため、すぐにフェードします (このため、コントロール テンプレートを編集して表示状態を変更する必要があります)。

<TextBox>  
    <TextBox.Style>  
        <Style TargetType="TextBox">  
            <Style.Triggers>  
                <Trigger Property="IsFocused" Value="true">  
                    <Setter Property="BorderBrush" Value="Red" />  
                </Trigger>  
                <Trigger Property="IsMouseOver" Value="true">  
                    <Setter Property="BorderBrush" Value="Red" />  
                </Trigger>  
            </Style.Triggers>  
        </Style>  
    </TextBox.Style>  
</TextBox>  

ボックスにカーソルを合わせると、すぐに消える赤い境界線が表示されます

この XAML はまったく機能しませんか??

于 2012-10-09T09:43:32.030 に答える
1

あなたはコードを投稿しませんでしたが、私はあなたが単にあなたの:のTextBox設定を忘れたと思います(それは私にも起こりました) 。BorderThicknesstextbox

<TextBox BorderThickness="4">
        <TextBox.Style>
            <Style TargetType="{x:Type TextBox}">
                <Style.Triggers>
                    <Trigger Property="IsFocused" Value="true">
                        <Setter Property="BorderBrush" Value="#4D90FE" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="BorderBrush" Value="#4D90FE" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
于 2012-10-09T09:38:15.357 に答える
1

あなたのスタイルは機能し、テンプレートなしでスタイルのようにプロパティを設定するBackgroundと、それが適用されることがわかります。ただし、他の誰かが言及したように、変更が表示されない理由は、デフォルトの WPF コントロール テンプレートのアニメーションのためですTextBox(アニメーション値は常にローカル値、セッター、およびトリガーよりも優先されます)。コントロール テンプレートを再定義すると、それらのアニメーションは存在しなくなるため、例が機能します。できることは、既定のTextBoxテンプレートを使用して目的に合わせて変更することです (ここで見つけることができます: http://msdn.microsoft.com/en-us/library/cc645061%28VS.95%29.aspx )。

于 2012-10-09T16:29:10.637 に答える