2

次のスタイルでは、適用先のテキスト ボックスが無効な状態になると、例外 "'ContentElement' 名が 'System.Windows.Controls.Grid' の名前スコープに見つかりません" が発生します。ファウルの箇所にコメントを追加しました。コメントアウトするだけでなく、これを修正する方法はありますか?

<Style x:Key="ThemedTextBox" TargetType="{x:Type TextBox}">
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Background" Value="#FFFFFFFF"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Padding" Value="-1"/>
        <Setter Property="BorderBrush">
            <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FFA3AEB9" Offset="0"/>
                    <GradientStop Color="#FF8399A9" Offset="0.375"/>
                    <GradientStop Color="#FF718597" Offset="0.375"/>
                    <GradientStop Color="#FF617584" Offset="1"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                    <Grid x:Name="RootElement">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="00:00:00.1" To="MouseOver"/>
                                    <VisualTransition GeneratedDuration="00:00:00.1" To="ReadOnly"/>
                                    <VisualTransition GeneratedDuration="00:00:00.1" To="Disabled"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="MouseOverState" Storyboard.TargetProperty="(UIElement.Opacity)">
                                            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
                                        </DoubleAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <!--DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="DisabledState" Storyboard.TargetProperty="(UIElement.Opacity)">
                                            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
                                        </DoubleAnimationUsingKeyFrames>
    <!--************** This is where the problem is **************-->
                                <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="ContentElement" Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)">
                                            <SplineColorKeyFrame KeyTime="00:00:00" Value="#FF808080"/>
                                        </ColorAnimationUsingKeyFrames-->
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="ReadOnly">
                                    <Storyboard/>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="FocusStates">
                                <VisualState x:Name="Focused">
                                    <Storyboard>
                                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="MouseOverState" Storyboard.TargetProperty="(UIElement.Opacity)">
                                            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
                                        </DoubleAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Unfocused">
                                    <Storyboard/>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>

                        <Grid Margin="0,0,0,0" x:Name="NormalState">
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Fill="{StaticResource GlossyBlack_TextBoxBackgroundGradient}">
                            </Rectangle>
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Stroke="{StaticResource GlossyBlack_TextBoxStroke}">
                            </Rectangle>
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Height="Auto" Fill="{StaticResource GlossyBlack_TextBoxHighlightGradient}"/>

                        </Grid>
                        <Grid Margin="0,0,0,0" x:Name="MouseOverState" Opacity="0">
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Fill="{StaticResource GlossyBlack_TextBoxBackgroundGradient}"/>
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Stroke="{StaticResource GlossyBlack_TextBoxStroke}"/>
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Height="Auto" Fill="{StaticResource GlossyBlack_TextBoxMouseOverHighlight}"/>

                        </Grid>
                        <Grid Margin="0,0,0,0" x:Name="DisabledState" Opacity="0">
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Fill="{StaticResource GlossyBlack_TextBoxDisabledBackground}"/>
                            <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" RadiusX="0" RadiusY="0" Stroke="{StaticResource GlossyBlack_TextBoxStroke}"/>

                        </Grid>

                        <ScrollViewer BorderThickness="0" IsTabStop="False" Padding="{TemplateBinding Padding}" Margin="4,4,4,4" x:Name="PART_ContentHost" BorderBrush="{x:Null}" Foreground="#FFFFFFFF"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
4

3 に答える 3

1

ターゲットをまったく指定する必要はないと思います。それを削除すると、動作し始めるはずです

Storyboard.TargetName="ContentElement"

単純なコピー/貼り付けの間違いのようです。ただし、念のため、独自のスタイル トリガーでターゲットを指定する必要はありません (テンプレート トリガー内にあり、テンプレート内のさまざまな要素を操作している場合、またはアニメーションがスタイルの外で宣言されている場合のみ)。要素を参照...

于 2012-04-13T15:25:44.823 に答える
0

ColorAnimationUsingKeyFrames を提供する意図は、ボックスが有効から無効に変更されたときにカラー アニメーションを実行することだったと思います。

ただし、背景グリッドの不透明度を制御する DoubleAnimationUsingKeyFrames はすでにその仕事をほとんど行っているので、ColorAnimationUsingKeyFrames を含める必要はないと思います。

他の人が言ったように、あなたの差し迫った問題はまさにエラーメッセージが言っていることです.ControlTemplateには「ContentElement」という要素がありません. あなたの最善の策は、私が思う ColorAnimationUsingKeyFrames 全体を削除することです。

于 2012-04-13T15:36:51.487 に答える
-1

TextBox「ContentElement」の名前です。そうでない場合は、そうする必要があります。

ドキュメントの例を見ると...

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard.targetname.aspx

...次に、Storyboard.TargetName に XAML 内の有効なアイテムの名前を指定する必要があることがわかります。

于 2012-04-13T15:15:45.507 に答える