Index: Native/Src/Packages/Gui/Studio/Src/XamlDocument.cpp
===================================================================
--- Native/Src/Packages/Gui/Studio/Src/XamlDocument.cpp	(revision 16408)
+++ Native/Src/Packages/Gui/Studio/Src/XamlDocument.cpp	(working copy)
@@ -236,9 +236,12 @@
     mUndoCommand.SetExecuteFunc(MakeDelegate(this, &XamlDocument::Undo));
     mRedoCommand.SetExecuteFunc(MakeDelegate(this, &XamlDocument::Redo));
 
-    mCutCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::Cut));
-    mCopyCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::Copy));
-    mPasteCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::Paste));
+    mCutCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanEdit),
+        MakeDelegate(this, &XamlDocument::Cut));
+    mCopyCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanEdit),
+        MakeDelegate(this, &XamlDocument::Copy));
+    mPasteCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanEdit),
+        MakeDelegate(this, &XamlDocument::Paste));
     mPasteAsTextCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanPasteAsText),
         MakeDelegate(this, &XamlDocument::PasteAsText));
     mSelectAllCommand.SetExecuteFunc(MakeDelegate(this, &XamlDocument::SelectAll));
@@ -253,7 +256,8 @@
         MakeDelegate(this, &XamlDocument::Duplicate));
     mResetLayoutCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::ResetLayout));
     mResetSizeCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::ResetSize));
-    mDeleteElementCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::DeleteElement));
+    mDeleteElementCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanEdit),
+        MakeDelegate(this, &XamlDocument::DeleteElement));
 
     mGroupElementsCommand = MakePtr<DelegateCommand>(MakeDelegate(this, &XamlDocument::CanGroupElements),
         MakeDelegate(this, &XamlDocument::GroupElements));
@@ -3089,6 +3093,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)
+    {
+        return false;
+    }
+
+    // Don't allow Edit commands on the Style or Template scope root
+    if (scope->GetRoot() == selectedItem && (
+        scope->GetType() == ScopeType_Style ||
+        scope->GetType() == ScopeType_Template))
+    {
+        return false;
+    }
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
 bool XamlDocument::CanPasteAsText(Noesis::BaseComponent*)
 {
     String text = Clipboard::Get();
@@ -4157,7 +4199,7 @@
     NS_ASSERT(selection.Size() == 1);
 
     ElementTreeItem* treeItem = (ElementTreeItem*)selection.Back();
-    if (treeItem == nullptr)
+    if (treeItem == nullptr || !Helper::IsType<FrameworkElement>(treeItem->GetScopeElement()))
     {
         return false;
     }
Index: Native/Src/Packages/Gui/Studio/Src/XamlDocument.h
===================================================================
--- Native/Src/Packages/Gui/Studio/Src/XamlDocument.h	(revision 16408)
+++ Native/Src/Packages/Gui/Studio/Src/XamlDocument.h	(working copy)
@@ -484,6 +484,7 @@
     bool TryPasteKeyFrames(const char* text, Noesis::NodeObject* node);
     bool TryPasteXAML(const char* text, Noesis::NodeObject* node);
     Noesis::Ptr<Noesis::NodeObject> ValidateXAML(const char* text);
+    bool CanEdit(Noesis::BaseComponent*);
     bool CanPasteAsText(Noesis::BaseComponent*);
     void PasteAsText(Noesis::BaseComponent*);
     void DeleteElement(Noesis::BaseComponent*);
