WPF文本框样式引发InvalidOperationException

WPF文本框样式引发InvalidOperationException,wpf,xaml,styles,Wpf,Xaml,Styles,当应用于“System.Windows.Controls.Grid”的文本框进入禁用状态时,以下样式会导致异常“'ContentElement'名称在“System.Windows.Controls.Grid”的名称范围内找不到”。我在犯规现场加了评论。你知道我怎样才能纠正这一点,而不仅仅是把它说出来吗 <Style x:Key="ThemedTextBox" TargetType="{x:Type TextBox}"> <Setter Property="Bo

当应用于“System.Windows.Controls.Grid”的文本框进入禁用状态时,以下样式会导致异常“'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>

是文本框“ContentElement”的名称,如果不是,则应为

如果您查看文档中的示例


…然后您将看到Storyboard.TargetName必须在XAML中指定一个有效项的名称。

是文本框“ContentElement”的名称,如果不是,则应该是

如果您查看文档中的示例


…然后您将看到Storyboard.TargetName必须在XAML中指定一个有效项的名称。

我认为您根本不需要指定目标,删除它,事情就应该开始工作了

Storyboard.TargetName="ContentElement"

这看起来像是一个简单的复制/粘贴错误。但以防万一,您不应该在自己的样式触发器上指定目标(仅当它位于模板触发器中,并且您正在操作模板中的各种元素,或者动画声明在您的样式之外,并且您必须引用一个元素…

我认为您根本不需要指定目标,请删除它,然后事情应该开始工作

Storyboard.TargetName="ContentElement"

这看起来像是一个简单的复制/粘贴错误。但以防万一,您不应该在自己的样式触发器上指定目标(仅当它位于模板触发器中,并且您正在操作模板中的各种元素,或者动画声明在您的样式之外,并且您必须引用元素…

我假设使用关键帧提供彩色动画的目的是在框从启用变为禁用时执行一些彩色动画d

但是,控制背景网格不透明度的DoubleAnimationUsingKeyFrames已经基本完成了这项工作,因此我认为不需要包括ColorAnimationUsingKeyFrames


正如其他人所说,您当前的问题正是错误消息所说的:ControlTemplate没有名为“ContentElement”的元素我想,你最好的办法就是使用关键帧删除整个彩色动画。

我认为提供彩色动画使用关键帧的目的是在框从启用变为禁用时执行一些彩色动画

但是,控制背景网格不透明度的DoubleAnimationUsingKeyFrames已经基本完成了这项工作,因此我认为不需要包括ColorAnimationUsingKeyFrames


正如其他人所说,您当前的问题正是错误消息所说的:ControlTemplate没有名为“ContentElement”的元素在它里面。我认为你最好的办法就是使用关键帧删除整个彩色动画。

如果你的风格没有已知名为ContentElement的元素,它怎么工作?如果你的风格没有已知名为ContentElement的元素,它怎么工作?“ContentElement”所提及的不是整个文本框的名称,而是指在所提及的ControlTemplate中定义的元素。将文本框称为“ContentElement”不会有帮助,因为模板本身看不到外部。嗯,鲍勃……在投下否定词之前,你应该注意。提问者说他正在将其应用到文本框上。如果他把文本框的名称放在那里,它就会起作用。丹尼斯·莫罗夫也是正确的,因为你可以完全删除这一行。如果我正确理解你的答案,你的建议sal要用提问者定义的样式声明文本框,即不可更改