Я все еще говорю, что вы должны делать это правильно с привязкой данных, но если вы настаиваете ... есть несколько различных способов go об этом.
Контекстные меню не являются частью обычного визуального дерева, так что вы должны получить к ним доступ напрямую. Дайте вашему контекстному меню имя, а затем найдите кнопку, пройдя по визуальному дереву его шаблона:
// button has to be templated in order for this to work,
// so don't try it in the parent window's constructor
// (add a this.contextMenu.Loaded handler instead if you have to)
var button = this.contextMenu.Template.FindName("openinBrowser", this.contextMenu) as Button;
Если ваше визуальное дерево особенно сложное, то более быстрым вариантом будет создание логического ресурса в ресурсах вашего окна. block:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<Window.Resources>
<sys:Boolean x:Key="ButtonEnabled">True</sys:Boolean>
</Window.Resources>
... и затем динамически привязывайте свою кнопку к этому:
<Button x:Name="openinBrowser" IsEnabled="{DynamicResource ButtonEnabled}">
Это нарушает ваше правило "без привязки", поэтому я спрашивал, почему вы Вы так непреклонны в том, что не используете привязку данных ... вы все равно можете использовать ее, даже если не привязываетесь к контексту данных. В этом сценарии вместо этого вы устанавливаете значение этого ресурса в своем коде:
this.Resources["ButtonEnabled"] = false;