Index: XamlDocument.cpp
===================================================================
--- XamlDocument.cpp	(revision 16441)
+++ XamlDocument.cpp	(working copy)
@@ -240,7 +240,7 @@
         MakeDelegate(this, &XamlDocument::Cut));
     mCopyCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanEdit),
         MakeDelegate(this, &XamlDocument::Copy));
-    mPasteCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanEdit),
+    mPasteCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanPaste),
         MakeDelegate(this, &XamlDocument::Paste));
     mPasteAsTextCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanPasteAsText),
         MakeDelegate(this, &XamlDocument::PasteAsText));
@@ -3102,37 +3102,44 @@
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 bool XamlDocument::CanEdit(Noesis::BaseComponent*)
 {
-    if (!HasOneElementSelected(nullptr))
-    {
-        return false;
-    }
     Scope* scope = GetCurrentScope();
     if (scope == nullptr)
     {
         return false;
     }
+
     Vector<DocumentObjectTreeItem*, 1> selection;
     scope->GatherSelectedNodesByType(DocumentObjectType_Element, selection);
-    NS_ASSERT(selection.Size() == 1);
     if (selection.Empty())
     {
         return false;
     }
 
-    // Don't allow pasting in non-element tree items
-    ElementTreeItem* selectedItem = DynamicCast<ElementTreeItem*>(selection.Back());
-    if (selectedItem == nullptr)
+    if (scope->GetType() == ScopeType_Style || scope->GetType() == ScopeType_Template)
     {
-        return false;
+        for (uint32_t i = 0; i < selection.Size(); i++)
+        {
+            ElementTreeItem* treeItem = DynamicCast<ElementTreeItem*>(selection[i]);
+            if (treeItem != nullptr && scope->GetRoot() == treeItem)
+            {
+                return false;
+            }
+        }
     }
 
-    // Don't allow Edit commands on the Style or Template scope root
-    if (!Helper::IsType<FrameworkElement>(selectedItem->GetScopeElement()))
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+bool XamlDocument::CanPaste(Noesis::BaseComponent*)
+{
+    Scope* scope = GetCurrentScope();
+    if (scope != nullptr && scope->GetType() == ScopeType_Style)
     {
         return false;
     }
 
-    return true;
+    return HasOneElementSelected(nullptr);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
Index: XamlDocument.h
===================================================================
--- XamlDocument.h	(revision 16441)
+++ XamlDocument.h	(working copy)
@@ -486,6 +486,7 @@
     bool TryPasteXAML(const char* text, Noesis::NodeObject* node);
     Noesis::Ptr<Noesis::NodeObject> ValidateXAML(const char* text);
     bool CanEdit(Noesis::BaseComponent*);
+    bool CanPaste(Noesis::BaseComponent*);
     bool CanPasteAsText(Noesis::BaseComponent*);
     void PasteAsText(Noesis::BaseComponent*);
     void DeleteElement(Noesis::BaseComponent*);
