-1

xaml で書かれたテンプレートがあります。TextBox でテンプレートをオンにする方法を記述できますか?

        <Grid.Resources>
        <Storyboard x:Key="FlashErrorIcon">
        <ObjectAnimationUsingKeyFrames BeginTime="00:00:00"                                        Storyboard.TargetProperty="(UIElement.Visibility)">
                <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Hidden}"/>                                 
                <DiscreteObjectKeyFrame KeyTime="00:00:03.2000000" Value="{x:Static Visibility.Visible}"/>
                <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Visible}"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
        <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="Background" Value="Pink"/>
                    <Setter Property="Foreground" Value="Black"/>
                </Trigger>
            </Style.Triggers>
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel LastChildFill="True"                    
                                   ToolTip="{Binding ElementName=controlWithError,Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
                            <Ellipse DockPanel.Dock="Right" 
                             ToolTip="{Binding ElementName=controlWithError, 
                                 Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                             Width="15" Height="15" 
                             Margin="-25,0,0,0"
                             StrokeThickness="1" Fill="IndianRed" >
                                <Ellipse.Stroke>
                                    <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                                        <GradientStop Color="#FFFA0404" Offset="0"/>
                                        <GradientStop Color="#FFC9C7C7" Offset="1"/>
                                    </LinearGradientBrush>
                                </Ellipse.Stroke>
                                <Ellipse.Triggers>
                                    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                        <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/>
                                    </EventTrigger>
                                </Ellipse.Triggers>
                            </Ellipse>
                            <TextBlock DockPanel.Dock="Right" 
                            ToolTip="{Binding ElementName=controlWithError, 
                                 Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                            Foreground="White"
                            FontSize="10" 
                            Margin="-15,5,0,0" FontWeight="Bold">!
                        <TextBlock.Triggers>
                            <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/>
                            </EventTrigger>
                        </TextBlock.Triggers>
                            </TextBlock>
                            <Border BorderBrush="Red" BorderThickness="1">
                                <AdornedElementPlaceholder Name="controlWithError"/>
                            </Border>
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Resources>

TextBox にさまざまな方法で含めようとしましたが、うまくいきませんでした。このテンプレートを含める方法は?

    <TextBox>?????????What should I write here???????????>
     ?????????What should I write here???????????
    </TextBox>

テンプレートを有効にするには?どんな助けでも大歓迎です!

4

2 に答える 2

1

textBoxInErrorTextBox スタイルにキーを追加するのを忘れました:

<Grid.Resources>
    ...
    <Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
        ...
    </Style>
    ...
</Grid.Resources>

そのキーがない場合、Style は TextBox のデフォルト スタイルとして処理されます。その場合、TextBox 宣言で Style を明示的に参照せず、そのStyle="{StaticResource textBoxInError}"部分を削除する必要があります。


編集: Style がリソース ディクショナリ ( Grid.ResourcesXAML など) に含まれていて、上記のように Key がある場合 ( textBoxInError)、その Style を次のように使用します。

<Grid>
    <Grid.Resources>
        <Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
        ...
        </Style>
        ...
    </Grid.Resources>
    ...
    <TextBox Style="{StaticResource textBoxInError}" ... />
</Grid>
于 2012-12-18T09:50:49.110 に答える
1

あなたのスタイルには、次の減速があります。

これは、このスタイルがすべてのテキスト ボックスに適用されることを意味します。自分で別のスタイルを設定しない限り。

これを書くとき:

<TextBox Validation.ErrorTemplate="{StaticResource FlashErrorIcon}"
     Style="{StaticResource textBoxInError}" TabIndex="1" Margin="147,145,168,131">

デフォルトのスタイルを ( という名前のスタイルに) 変更していますtextboxInError...

したがってStyle、テキストボックスから属性を削除するだけです。

別の解決策

スタイルに特定の名前を付け、デフォルトのスタイルにはしない場合は、次を使用します。

<Style TargetType="{x:Type TextBox}" x:Key="textBoxInError" >

そして、元のコードは正しく機能します。

<TextBox Style="{StaticResource textBoxInError}" />
于 2012-12-18T09:51:32.777 に答える