2012-04-13 8 views
2

Der folgende Stil bewirkt, dass die Ausnahme "'ContentElement' Name nicht im Namensbereich von 'System.Windows.Controls.Grid'" gefunden wird, wenn das Textfeld, auf das es angewendet wird, in den deaktivierten Zustand wechselt. Ich habe Kommentare an der Stelle des Fouls hinzugefügt. Irgendeine Idee, wie ich das korrigieren und nicht nur kommentieren kann?WPF-Textfeld-Typ, der InvalidOperationException wirft

<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> 
+1

Wie kann es funktionieren, wenn Sie kein Element mit dem Namen ContentElement haben, das Ihrem Stil bekannt ist? – Nikolay

Antwort

1

glaube ich überhaupt nicht Sie Ziel angeben müssen, entfernen und die Dinge sollten

Storyboard.TargetName="ContentElement" 

es sieht aus wie ein einfaches Kopieren/Einfügen Fehler zu arbeiten beginnen. Aber nur für den Fall, Sie sollten nicht Ziel auf Ihrem eigenen Stil Trigger angeben müssen (nur wenn es in der Vorlage Trigger ist und Sie verschiedene Elemente in der Vorlage manipulieren oder die Animation außerhalb Ihres Stils deklariert wird, und Sie müssen verweisen auf ein Element ...

+0

gerade getestet, das ist es .. –

-1

Ist der Name Ihrer TextBox "ContentElement", wenn nicht, sollte es sein.

Wenn man sich das Beispiel in der Dokumentation suchen ...

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

... dann sehen Sie, dass die Storyboard.TargetName den Namen eines gültigen Element in Ihrem XAML angegeben werden müssen.

+0

Das angegebene "ContentElement" bezieht sich nicht auf den Namen der gesamten TextBox, es sollte sich auf ein Element beziehen, das in der ControlTemplate definiert ist, in der es erwähnt wird. Das Aufrufen der TextBox "ContentElement" wird nicht helfen, da die Vorlage nicht von außerhalb sehen kann. –

+0

Uh Bob ... Sie sollten aufpassen, bevor Sie ein Negativ löschen. Der Fragesteller sagte, dass er es auf die TextBox anwendet. Wenn er den Namen der TextBox dort anbringt, würde es funktionieren. Denis Moroov ist auch richtig, wie Sie diese Zeile insgesamt entfernen können. – Rhyous

+0

Wenn ich Ihre Antwort richtig verstanden habe, war Ihr Vorschlag, die TextBox mit dem vom Fragesteller definierten Stil zu deklarieren. d. h. . Leider funktioniert das nicht, da die in der Style-Ressource definierte ContentTemplate diese TextBox nicht sehen kann. Wenn ich Sie falsch verstanden habe, erklären Sie bitte, was Sie meinten. Vielen Dank. –

0

ich nehme die Absicht, eine ColorAnimationUsingKeyFrames Bereitstellung war von etwas Farbe Animation, wenn die Box Änderungen zu tun, um in die Lage versetzt, deaktiviert werden.

jedoch Ihre DoubleAnimationUsingKeyFrames, die die Undurchsichtigkeit der Kontrollen Hintergrundraster macht diesen Job schon ziemlich gut, also glaube ich nicht, dass Sie die ColorAnimationUsingKeyFrames miteinbeziehen müssen

As other rs haben gesagt, Ihr unmittelbares Problem ist genau das, was die Fehlermeldung sagt: Die ControlTemplate enthält kein Element namens "ContentElement". Ihre beste Wette wird nur sein, um die gesamten ColorAnimationUsingKeyFrames zu entfernen, denke ich.

Verwandte Themen