Да, есть способ. Это некрасиво. Вы должны добавить атрибут xmlns: Commands к тегу window1.xaml. Я закончил тем, что нашел код, который я нашел в this Code Project article.
Является ли продукт, который вы хотите отобразить на этикетке, что-то генерируемое при загрузке или из другого события управления?
Я не уверен, что это вам поможет, но я столкнулся с чем-то подобным, где я пытался динамически генерировать XAML с помощью XSLT. Мое решение сработало, вроде ... ну, совсем не то, что я пытался сделать. Но, возможно, это поможет вам.
Как я уже говорил, вы должны объявить Xmlns в вашей странице тега, например так:
<Page x:Class="WpfBrowserApplication1.Page1"
blah blah blah
xmlns:Commands="clr-namespace:WpfBrowserApplication1">
Затем определить статический класс в приложении с тем же пространством имен, почти так же, как в примере в статье Co Project, с обработчиками для RoutedUICommand:
namespace WpfBrowserApplication1
{
public static class CommandHandlers
{
private static System.Windows.Input.RoutedUICommand _submitCommand;
static CommandHandlers()
{
_submitCommand = new System.Windows.Input.RoutedUICommand("Submit", "SubmitCommand", typeof(CommandHandlers));
}
public static void BindCommandsToPage(System.Windows.Controls.Page caller)
{
caller.CommandBindings.Add(new System.Windows.Input.CommandBinding(SubmitCommand, SubmitContact_Executed, SubmitContact_CanExecute));
}
public static System.Windows.Input.RoutedUICommand SubmitCommand
{
get { return _submitCommand; }
}
public static void SubmitContact_Executed(object sender, System.Windows.Input.ExecutedRoutedEventArgs e)
{
...do stuff...
}
public static void SubmitContact_CanExecute(object sender, System.Windows.Input.CanExecuteRoutedEventArgs e)
{
if (e.Source is System.Windows.Controls.Button)
e.CanExecute = true;
else
e.CanExecute = false;
}
}
}
противная часть, что, насколько я нашел, единственный способ отображения вещи в Page1.xaml должен привести объект отправителя и выкапывать элементы пользовательского интерфейса страницы, подобно тому, как вы выкапываете h DOM на веб-странице. У меня был некоторый успех в этом, но, конечно, не претендуйте на роль эксперта.
Последнее, что вам нужно сделать, это подключить ваш контроль в Page1.xaml.cs.В XAML, вы делаете это так:
<Button Name="btnSubmit" Command="Commands:CommandHandlers.SubmitCommand" etc... />
В отделенном коде, например, так:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
CommandHandlers.BindCommandsToPage(this);
}
Я надеюсь, что помогает, и удачи.
Это отличный план B. Текущее состояние кода достойное. Я не думал просто перемещать все свои взаимодействия в статический вспомогательный класс, если это делает WPF привязанным. Это просто очень странно, но я могу преодолеть это, если это необходимо. – Abel
Я не могу дождаться, когда узнаю больше о сволочь ;-) – Abel
Я не уверен, что это то, что вы ищете, но я подумал, что это может помочь. –