はい、方法はあります。それはきれいではありません。window1.xaml タグに xmlns:Commands 属性を追加する必要があります。この Code Project の記事で見つけたいくつかのコードを粗末にしてしまいました。
ラベルに表示したい製品は、ロード時に生成されたものですか、それとも別のコントロール イベントから生成されたものですか?
これが役立つかどうかはわかりませんが、XSLT を使用して XAML を動的に生成しようとしていたときに、似たようなことに遭遇しました。私の解決策はうまくいきました。しかし、多分それはあなたを助けるでしょう。
先ほど言ったように、次のように、ページ タグで xmlns を宣言する必要があります。
<Page x:Class="WpfBrowserApplication1.Page1"
blah blah blah
xmlns:Commands="clr-namespace:WpfBrowserApplication1">
次に、RoutedUICommand のハンドラーを使用して、Code Project 記事の例とほぼ同じ名前空間を使用して、アプリケーションで静的クラスを定義します。
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 にマップする唯一の方法は、送信者オブジェクトをキャストし、ページの UI 要素を掘り下げることです。これは、DOM を掘り下げる方法と同様です。ウェブページで。私はこれである程度成功しましたが、確かに専門家のふりをしないでください。
最後に、Page1.xaml.cs でコントロールを接続します。XAML では、次のようにします。
<Button Name="btnSubmit" Command="Commands:CommandHandlers.SubmitCommand" etc... />
コード ビハインドでは、次のようになります。
private void Page_Loaded(object sender, RoutedEventArgs e)
{
CommandHandlers.BindCommandsToPage(this);
}
お役に立てば幸いです。幸運を祈ります。