Windows Vista Forums
Vista Forums Home Join Vista Forums Windows 7 Forum Vista Tutorials Tags
Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks.

Go Back   Vista Forums > Misc Newsgroups > Avalon

Vista - Problem binding animation to element in a template

 
 
Old 05-18-2007   #1 (permalink)
mikesnoise@gmail.com


 
 

Problem binding animation to element in a template

Here's my XAML (I've surrounded the important line with the data
binding with >>> marks):

<DataTemplate x:Key="bookmarksTemplate2">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource
Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>

>>>>>>>>>>>>>>>>>>

<DoubleAnimation Storyboard.TargetName="itemContainer"
Storyboard.TargetProperty="Height" Duration="0:0:0.2" By="{Binding
ElementName=entryContainer, Path=Height}"/>
>>>>>>>>>>>>>>>>>>


</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="itemContainer"
Storyboard.TargetProperty="Height" Duration="0:0:0.2" To="32"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</DataTemplate.Triggers>
<StackPanel x:Name="itemContainer" Height="32">
<StackPanel Orientation="Horizontal">
<Image Source="image.png"/>
<StackPanel>
<TextBlock Text="{Binding Path=Name}"/>
<TextBlock Text="{Binding Path=Uri}"/>
</StackPanel>
</StackPanel>
<Grid Margin="0,4,0,0" Name="entryContainer">
<Grid.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="0,2,4,2"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,2,4,2"/>
</Style>
</Grid.Resources>

<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>

<TextBlock Grid.Row="0" Grid.Column="0">Username:</
TextBlock>
<TextBox Grid.Row="0" Grid.Column="1"/>
<TextBlock Grid.Row="1" Grid.Column="0">Password:</
TextBlock>
<TextBox Grid.Row="1" Grid.Column="1"/>
</Grid>
</StackPanel>
</DataTemplate>

When I run my program I get the following exception:

System.InvalidOperationException was unhandled
Message="Cannot freeze this Storyboard timeline tree for use across
threads."
Source="PresentationFramework"
StackTrace:
at System.Windows.Media.Animation.BeginStoryboard.Seal()
at System.Windows.TriggerAction.Seal(TriggerBase
containingTrigger)
at System.Windows.TriggerActionCollection.Seal(TriggerBase
containingTrigger)
at System.Windows.TriggerBase.Seal()
at System.Windows.DataTrigger.Seal()
at System.Windows.TriggerCollection.Seal()
at System.Windows.StyleHelper.SealTemplate(FrameworkTemplate
frameworkTemplate, Boolean& isSealed, FrameworkElementFactory
templateRoot, TriggerCollection triggers, ResourceDictionary
resources, HybridDictionary childIndexFromChildID, FrugalStructList`1&
childRecordFromChildIndex, FrugalStructList`1&
triggerSourceRecordFromChildIndex, FrugalStructList`1&
containerDependents, FrugalStructList`1& resourceDependents,
ItemStructList`1& eventDependents, HybridDictionary& triggerActions,
HybridDictionary& dataTriggerRecordFromBinding, Boolean&
hasInstanceValues, EventHandlersStore& eventHandlersStore)
at System.Windows.FrameworkTemplate.Seal()
at
System.Windows.Controls.ContentPresenter.OnTemplateChanged(DependencyObject
d, DependencyPropertyChangedEventArgs e)
at
System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs
e)
at
System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs
e)
at
System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs
args)
at
System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex
entryIndex, DependencyProperty dp, PropertyMetadata metadata,
EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean
coerceWithDeferredReference, OperationType operationType)
at
System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp,
Object value, PropertyMetadata metadata, Boolean
coerceWithDeferredReference, OperationType operationType, Boolean
isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty
dp, Object value)
at System.Windows.Controls.ContentPresenter.EnsureTemplate()
at
System.Windows.Controls.ContentPresenter.OnPreApplyTemplate()
at System.Windows.FrameworkElement.ApplyTemplate()
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Border.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Control.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at
System.Windows.Controls.VirtualizingStackPanel.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement
element, Size constraint)
at System.Windows.Controls.ItemsPresenter.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement
element, Size constraint)
at
System.Windows.Controls.ContentPresenter.MeasureOverride(Size
constraint)
at
System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean
forceInfinityV)
at System.Windows.Controls.Grid.MeasureCellsGroup(Int32
cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean
forceInfinityV)
at System.Windows.Controls.Grid.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.ScrollViewer.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Border.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Control.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.DockPanel.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean
forceInfinityV)
at System.Windows.Controls.Grid.MeasureCellsGroup(Int32
cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean
forceInfinityV)
at System.Windows.Controls.Grid.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean
forceInfinityV)
at System.Windows.Controls.Grid.MeasureCellsGroup(Int32
cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean
forceInfinityV)
at System.Windows.Controls.Grid.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.DockPanel.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement
element, Size constraint)
at
System.Windows.Controls.ContentPresenter.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Decorator.MeasureOverride(Size
constraint)
at
System.Windows.Documents.AdornerDecorator.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Border.MeasureOverride(Size
constraint)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Window.MeasureOverrideHelper(Size constraint)
at System.Windows.Window.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureCore(Size
availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Interop.HwndSource.SetLayoutSize()
at
System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
at System.Windows.Interop.HwndSource.set_RootVisual(Visual
value)
at System.Windows.Window.SetupInitialState(Double requestedTop,
Double requestedLeft, Double requestedWidth, Double requestedHeight)
at System.Windows.Window.CreateSourceWindowImpl()
at System.Windows.Window.SafeCreateWindow()
at System.Windows.Window.ShowHelper(Object booleanBox)
at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate
callback, Object args, Boolean isSingleParameter)
at
System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source,
Delegate callback, Object args, Boolean isSingleParameter, Delegate
catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at
System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object
state)
at System.Threading.ExecutionContext.runTryCode(Object
userData)
at
System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode
code, CleanupCode backoutCode, Object userData)
at
System.Threading.ExecutionContext.RunInternal(ExecutionContext
executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd,
Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr
wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate
callback, Object args, Boolean isSingleParameter)
at
System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source,
Delegate callback, Object args, Boolean isSingleParameter, Delegate
catchHandler)
at
System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority
priority, TimeSpan timeout, Delegate method, Object args, Boolean
isSingleParameter)
at
System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority
priority, Delegate method, Object arg)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32
msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at
System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame
frame)
at
System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at System.Windows.Application.Run()
at NeptuneFTP.App.Main() in C:\Users\Mike\Documents\Visual
Studio 2005\Projects\NeptuneFTP\NeptuneFTP\obj\Debug\App.g.cs:line 0
at System.AppDomain.nExecuteAssembly(Assembly assembly,
String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile,
Evidence assemblySecurity, String[] args)
at
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object
state)
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

All I'm trying to do is make the expand the height of the StackPanel
to include the Grid containing the TextBox and PasswordBox. Can anyone
tell me the proper way to bind to the animation To, From, and By
properties and how to bind to a property of an element within the
DataTemplate?

Thanks!
-Mike-


My System SpecsSystem Spec
Old 05-18-2007   #2 (permalink)
mikesnoise@gmail.com


 
 

Re: Problem binding animation to element in a template

For some reason I don't see my >>> marks around the code I meant to
point out. Here is the line that causes all the trouble:

<DoubleAnimation Storyboard.TargetName="itemContainer"
Storyboard.TargetProperty="Height" Duration="0:0:0.2" By="{Binding
ElementName=entryContainer, Path=Height}"/>

Can someone tell me why this causes the exception I put in the
previous post? And, more importantly, can someone show me the proper
way to bind an animation property to a property of an element in a
DataTemplate?

-Mike-

My System SpecsSystem Spec
 

Thread Tools


Similar Threads
Thread Forum
New template on SCVMM2008 problem Virtual Server
Problem with Empty XML Element Nodes in PowerShell PowerShell
Animation problem :( Vista General


Vista Forums is an independent web site and has not been authorized,
sponsored, or otherwise approved by Microsoft Corporation.
"Windows Vista", the Start Orb, and related materials are trademarks of Microsoft Corp.
© Designer Media Ltd

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46