• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Copy DependencyProperty with Reflection

H

Horst Klein

#1
I need to copy (clone) Properties of an FrameworkElement.
For the normal properties it's simple.

But how can I find and copy the DependencyProperties?

Thanks Horst
 

My Computer

L

Lloyd Dupont

#2
you need to give more detail if you hope to receive a useful answer.

meanwhile you can be interested in the following method:
DependencyObject.ReadLocalValue()


"Horst Klein" <HorstKlein@discussions.microsoft.com> wrote in message
news:B73B9C94-C54C-4792-A24C-94806380B41D@microsoft.com...
>I need to copy (clone) Properties of an FrameworkElement.
> For the normal properties it's simple.
>
> But how can I find and copy the DependencyProperties?
>
> Thanks Horst
 

My Computer

H

Horst Klein

#3
Hi Lloyd

To copy (clone) my standard properties i use this Method:

In the selectedProperties Argument I can define wich properties i loke to
copy.


Private Shared Sub CloneSelectedProperties(ByVal cloneElement As Object,
ByVal originElement As Object, ByVal selectedProperties As ArrayList)
Dim originProperty As Reflection.PropertyInfo
Dim cloneProperty As Reflection.PropertyInfo
Dim propertyName As String = ""
For Each propertyName In selectedProperties
originProperty = originElement.GetType.GetProperty(propertyName)
cloneProperty = cloneElement.GetType.GetProperty(propertyName)
If originProperty IsNot Nothing Then
If cloneProperty.CanWrite Then
cloneProperty.SetValue(cloneElement,
originProperty.GetValue(originElement, Nothing), Nothing)
Else
Dim reasonOfException As String =
VitoApplication.GetText(Core.TextCodes.PropertyIsReadOnly)
Dim objectInfo As String = originElement.GetType.FullName
Dim nameProperty As Reflection.PropertyInfo =
originElement.GetType.GetProperty("Name")
If nameProperty IsNot Nothing Then
objectInfo = objectInfo & " (Name=" &
nameProperty.GetValue(originElement, Nothing).ToString & ") "
End If
reasonOfException = String.Format(reasonOfException,
propertyName, objectInfo)
Throw New ElementMergeException("CloneSelectedProperties",
reasonOfException)
End If
End If
Next
End Sub

To Copy the Attached Properties i use this function

Private Shared Sub CloneDependencyProperties(ByVal cloneElement As
Object, ByVal originElement As Object)
Dim originDepObj As DependencyObject = TryCast(originElement,
DependencyObject)
If originDepObj IsNot Nothing Then
CloneDependencyProperty(CustomEventCommandBindingProperty,
originDepObj, cloneElement)
CloneDependencyProperty(DefaultEventCommandBindingProperty,
originDepObj, cloneElement)
End If
End Sub

Private Shared Sub CloneDependencyProperty(ByVal dependencyProperty As
DependencyProperty, ByVal originElement As DependencyObject, ByVal
cloneElement As Object)
Dim originDepObj As DependencyObject = TryCast(originElement,
DependencyObject)
Dim cloneDepProperty As Object
If originDepObj IsNot Nothing Then
cloneDepProperty = originDepObj.GetValue(dependencyProperty)
If cloneDepProperty IsNot Nothing Then
Dim cloneDepObj As DependencyObject = DirectCast(cloneElement,
DependencyObject)
cloneDepObj.SetValue(CustomEventCommandBindingProperty,
cloneDepProperty)
End If
End If
End Sub


It works, but I like to have a more generic solution

Horst
 

My Computer

Users Who Are Viewing This Thread (Users: 1, Guests: 0)