問題タブ [markup-extensions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - xaml マークアップ拡張機能の理解と使用が困難
マークアップ拡張機能を広く使用するデータ バインディング、コマンド、リソース、要素バインディング、スタイルなどの WPF の概念について学習していますが、マークアップ クラスの背後にある意味を理解するのに問題があります。に使用する必要があることを理解しています。したがって、クリアする必要があるいくつかのポイントがあります: (すべてのコード スニペットは Pro WPF in C# 2010 の本からのものです)
静的拡張の意味と使用法は何ですか? as で宣言できる静的リソースを宣言するために使用できますが、この xaml は私を混乱させます:
{x:Static SystemColors.ActiveCaptionBrush}では、ここで static の役割は何ですか? ここで x:Dynamic を使用すると何が変わりますか? この本は、この xaml がこのコードビハインドと同等であると述べています:
cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;
これは、静的プロパティを持つクラスがある場合、次のようなものを使用できるはずであることを意味します。
クラスを作成したにもかかわらず、 local:Static (ローカル名前空間を参照) を使用しようとしましたが、VisualStudio では使用できませんでした。これを達成する適切な方法は何ですか?
バインディングの意味は何ですか? これは、リソースのバインド、またはデータまたは要素のバインドに使用されます。要素バインディングは理解できましたが、要素ではないオブジェクトへのバインディングが問題を引き起こしました。例えば:
ここでは、テキストを SystemFonts.IconFontFamily プロパティにバインドしています。この場合の x:static の使用法と、作成したクラスのプロパティにバインドする方法を教えてください。また、バインディング ターゲットの値が変更された場合、テキスト フィールドのテキスト プロパティを更新する方法を教えてください。バインディングのため、それ自体で更新する必要がありますが、これは当てはまりますか?
本のすべての例は SystemFonts.IconFontFamily を利用していますが、そのようなバインディングの使用法と、私が作成したクラスに対してそれを行う方法を説明しているものはありませんか? この点に関して、何らかの助けが必要です。バインディングについてもっとお聞きしたいのですが、バインディングのみについては別の質問でお答えします。
最後に、これやあれを行う方法ではなく、何が起こっているかを説明する本またはリソースをお勧めしますか?
xaml - DataContext を設定できるが、グラフィックとして何もしないマークアップはありますか?
私は、物事が「非常にうまく」構築されていないプロジェクトに取り組んでいます。コントロールを配置するウィンドウの一部に「部分モデル」のようなものを作成したいので、その DataContext を指定できるがウィンドウのグラフィックを変更しないマークアップがあるかどうかを知りたい何らかの方法で(ボタンなどを追加するなど)。
そうでない場合は、どうすれば自分で作成できますか (MarkupExtension を継承することで考えます)、さらに重要なことは、実行できますか?
答えてくれてありがとう
編集1:
私のアイデアの例はこれです:
たぶん、これは私が何を意味するかを理解するのに役立つかもしれません.
c# - コレクションを返すXAMLマークアップ拡張機能を作成する方法
オブジェクトグラフ(WPF / Silverlight以外)にXAMLシリアル化を使用しており、XAMLの他の場所で定義されたコレクションの選択されたメンバーへの参照を使用してコレクションプロパティにデータを入力できるカスタムマークアップ拡張機能を作成しようとしています。
これは、私が達成しようとしていることを示す簡略化されたXAMLスニペットです。
各CountryオブジェクトのLanguagesプロパティには、カスタムマークアップ拡張機能であるLanguageSelectorで指定されたLanguageオブジェクトへの参照を含むIEnumerable<Language>が入力されます。
この役割で機能するカスタムマークアップ拡張機能を作成する試みは次のとおりです。
実際、このコードはほとんど機能します。参照されるオブジェクトが、それらを参照するオブジェクトの前にXAMLで宣言されている限り、ProvideValueメソッドは、参照されるアイテムが入力されたIEnumerable<Language>を正しく返します。これが機能するのは、Languageインスタンスへの後方参照が次のコード行によって解決されるためです。
ただし、XAMLに前方参照が含まれている場合(LanguageオブジェクトはCountryオブジェクトの後に宣言されているため)、これには(明らかに) Languageにキャストできない修正トークンが必要なために壊れます。
実験として、XAMLが後でトークンを何らかの方法で解決することを期待して、返されたコレクションをCollection <object>に変換しようとしましたが、逆シリアル化中に無効なキャスト例外がスローされます。
誰かがこれを機能させるための最善の方法を提案できますか?
どうもありがとう、ティム
wpf - MEF を使用して MVVM ビューをエクスポートする
私が構築しているアプリケーションには、いくつか (10 以上) の[Module]
実行可能ファイルがあります。
このようなものをファイルに指定したいと思い[Module]View.xaml
ます。
ここmef:ExportView
でMarkupExtension
、MEF コンポーザーのパーツを準備する です。
現在、...
- ファイル内で、View を.xml内の属性
[Module]View.xaml.cs
でマークします。ExportView(typeof([Module]ViewModel))
(typeof パラメータは、予期される ViewModel を指定します。) - また、ViewModel に
[ExportViewModel]
属性を付けます。 - (どちらの属性も ExportAttribute から派生します。)
- 各実行可能ファイルの Application クラスも
ApplicationBase
、MEF 構成を行い、View/ViewModel を結合/リンクするクラスから継承します。
ここで、すべての分離コードを から削除して[Module]View.xaml.cs
、自分自身と同僚が分離コード ファイルのマークアップを忘れないようにしたいと考えています。
これにはカスタム MarkupExtension が必要になると思います。MEF の基本と、メタデータを使用したカスタム エクスポート属性の作成に精通しています。ただし、この解決策には、いくつかのMEF プリミティブから派生する必要があると思います。
c# - デフォルトの画像を表示し、実際の画像の読み込みが完了したら変更する
名前で画像を取得し、オブジェクトを返す WPF マークアップ拡張機能がありBitmapImage
ます。
画像の取得には数秒かかる操作なので、デフォルトの画像を表示し、準備ができたら要求された画像を表示したいと思います。
私がやろうとしたのはこのようなものですが、これはBitmapImage
オブジェクトを変更する可能性があるため、UI を更新しません (サンプル コード):
BitmapImage
変更されたもの(INotifyPropertyChanged など)を使用するように UI を更新する方法はありますか、またはこれを達成するための別のアプローチはありますか?
wpf - マークアップ拡張機能を使用するときにコンマをエスケープするにはどうすればよいですか?
私が使用しているマークアップ拡張機能の 2 番目のパラメーターの値は、いくつかのコンマを含む文字列であり、これらのコンマが xaml インタープリター/パーサーによってパラメーター区切りとして解釈されることは望ましくありませんが、コンマを含む文字列全体値として使用されます。
次に例を示します。
Google は役に立ちませんでした。同様の問題がいくつか見つかりましたが、この問題には当てはまりません。
c# - XAMLで指定されたローカライズ可能なComboBoxItemsを持つComboBox
ローカライズされた代表的な文字列を使用して、列挙型のメンバーを入力したいComboBoxがあります。これを行う標準的な方法は、列挙型の値をキーとして、テキストを値としてコードビハインドで辞書を作成し、ItemsSourceをそれに設定することです。しかし、そうすると、セクシーなMarkupExtensionを使用できなくなります。そこで、XAMLでこれを実行したいと思います。簡単だと思いました。これが私が持っているものです:
それはほとんど機能します。ドロップダウンが正しく入力され、バインディングが機能しています。ドロップダウンをプルダウンすると、選択した値が表示されますが、コンボボックスのボックス部分は何をしても空白のままです。私はここで何が間違っているのですか?
c# - マークアップ拡張を介してコマンドを挿入することは良い習慣ですか?
依存性注入を使用してコマンドを解決するカスタムマークアップ拡張機能があります。ビューモデルでコマンドを作成したり、それらのバインディングを作成したりする必要がないため、非常に便利です。最近、このようなマークアップ拡張機能を使用することはmvvmでの良い習慣ではないと言われましたが、それは避けるべきです。本当?
マークアップ拡張のコード:
XAMLでの使用:
wpf - ビューモデル メソッドの結果を TextBox プロパティにデータ バインドするにはどうすればよいですか?
私のビューモデルとモデルには、署名付きのメソッドがありbool IsPropertyReadOnly(string propertyName)
ます。このメソッドは、現在ログインしているユーザーがプロパティ値を編集できるかどうかを決定します。少数のユーザーはプロパティ値を編集でき、他のほとんどのユーザーは読み取り専用アクセス権を持ちます。
モデルの各プロパティの読み取り専用ステータスを返すプロパティを作成する代わりに、の結果をプロパティにバインドしたいと考えてIsPropertyReadOny
いTextBox.IsReadOnly
ます。
これが私が構文を想像する方法です:
にはDataContext
ビューモデルが含まれているため、基本的にIsReadOnly
呼び出しの結果にバインドする必要があります((Class)this.DataContext).IsPropertyReadOnly("Address")
の使用については多くのドキュメントがありObjectDataProvider
ますが、オブジェクト データ プロバイダーは新しいオブジェクト インスタンスを作成しますが、これは私が望むものではありません。さらに、既存のインスタンスを使用するには、コード ビハインドで割り当てを行う必要があります。繰り返しますが、私がやりたいことではありません。
私の調査によると、私のニーズを継承するBinding
かMarkupExtension
、より適したソリューションのようです。
どんな助けでも大歓迎です。
.net - Type 型のキーを使用してディクショナリにバインドする XAML マークアップ
Dictionary<Type,string>
xaml経由でバインドしようとしています。
問題は、マークアップ拡張機能のインデクサー[]
がBinding
コンテンツを文字列として解釈することです。その場合、ある種の「unescape-sequence」はありますか?
{x:Type ns:OnePrettyType}
(文字列として送信されているため、バインディングは機能しません)