問題タブ [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.
c# - x:Staticタイプのコンバーターはいつ評価されますか:実行時またはコンパイル時?
私はwpfアプリケーションを持っていて、それをローカライズし始めています。私が選択したローカリゼーションの戦略は、カスタムMarkupExtensionクラスを作成することでした。
私の会社には、すべての文字列を使用して暗号化されたマップを作成するソリューションがすでに作成されており、各文字列を参照するにはintキーが必要なため、.resファイルは使用しません。そこで、すべての「int」キーを使用して列挙型を作成するカスタムジェネレーターを作成しました(intを使用した静的クラスの場合もありますが、実際には問題ではありません)。
したがって、XAMLファイルでこれらの列挙型キーのそれぞれを参照したいと思います。
作成された列挙型はTranslatedEnums
であり、私のトランスレータクラスはTranslator
(dhu)と呼ばれます。
しかし、x:Staticのドキュメントとタイプコンバータのドキュメントを読んだ後、次の質問が頭に浮かびました。
「コンパイル済みxaml」(baml)は、実行時またはコンパイル時に(x:Staticを介して)これらの各タイプを実際に評価しますか?
列挙型の値を静的に参照している理由の1つは、正確な列挙型の文字列キーではなく、その値であるため、アプリケーションのハッキングが少し難しくなるためです。
実行時に解決が行われる場合は、以前のコードを次のように絞り込むことができます。
これには、自分で列挙値を検索する必要がありますが、これはワンライナーです。
これによりXamlコードは小さくなりますが(これは良いことです)、キーが存在しない場合はコンパイル時に失敗します(これは問題ではありません)。
.net - VB.Net の WPF マークアップ拡張が機能しない
このブログ投稿ごとに VB.Net マークアップ拡張機能を作成しようとしていますが、vb.net で
しかし、それは投げています
エラー 1 不明なビルド エラー、'キーを null にすることはできません。パラメータ名: key Line 9 Position 62.' C:\Users\jessed.ECREATIVE\My Dropbox\Projects\c2d2\c2d2\Application.xaml 9 62 c2d2
例の c# 部分を次のように変換しました
私は何かを逃していますか?どんな助けでも大歓迎です
c# - XAMLが埋め込まれているアセンブリを決定するためのWPFMarkupExtension
XAMLリソースがページとしてアセンブリとして埋め込まれているWPFプロジェクト(.NET 4.0)があります。XAMLでは、XAMLを使用したアセンブリに関する特定の知識を持たない別のアセンブリで宣言されたMarkupExtensionが必要です。
ここで、XAMLが埋め込まれているアセンブリにアクセスできるようにするには、このMarkupExtensionが必要です。これはどのように可能ですか?
xaml - Silverlight 5:IMarkupExtensionクラスにConstructorArgumentを設定します
次のように、1つの値だけで開始できるMarkupExtensionが必要ですBinding
。
<TextBox Text="{Binding MyPath}"/>
それ以外の<TextBox Text="{Binding Path=MyPath}">
WPFでは、これはで実行されますがConstructorArgumentAttribute
、これはSilverlightには存在しません。のプロパティの
属性を確認しましたが、適用されている属性が見つかりませんでした。Path
Binding
何か案は?
c# - C#最初にマークアップイベントを実行する方法は?
私はこのマークアップ拡張クラスを持っています
そして、この Xaml
そして、このコードビハインド
コード ビハインドのメソッドよりも、マークアップ クラスのメソッドを最初に実行したいと考えています。
EventHandler を追加および削除しようとしましたが、そのためにはイベント名 ("Button_Click") が必要です。しかし、ハードコードを使用することはできません。
IDを取得する他の方法はありますか?
ありがとう。
c# - Silverlight での MarkupExtension 継承の代替
Silverlight に移植したい WPF アプリで MarkupExtension 継承を使用しています。
xamlでこのように使用できる「ロケール」マークアップ拡張を作成しました
実際、この MarkupExtension は、適用されるプロパティを文字列「My default translation」にバインドするか、見つかった場合は「aRandomId」という名前のデータベースに格納された文にバインドします。
この MarkupExtension を使用すると、UI のロケールを動的に変更できます (markupextension は、バインドされたすべてのプロパティの更新をトリガーする弱いイベント 'LocaleChanged' に登録されます)。
Silverlight では MarkupExtension を継承できないため、それを置き換えるメカニズムがあれば教えてください。
ありがとう。
PS : 必要に応じて、この MarkupExtension のソースを提供できます。
c# - MarkupExtension.ProvideValue -- IServiceProvider は実際に使用されていますか?
私は自分の古いコードを調べていて、ハイブリッドIValueConverter
/MarkupExtension
クラスに出くわしました。メソッドの が実際に役立つのか、どのように役立つのか疑問に思いIServiceProvider
ました。ProvideValue
IServiceProvider
メソッドが 1 つしかないことがわかります:GetService
は、適切なサービス タイプにキャストする必要があります。また、 MarkupExtension.ProvideValue MSDN ページも調べましたが、さまざまな種類のサービスが一覧表示されています。これらのサービスのいずれかが役立つかどうか、またはメソッドをそのままにしておく必要があるかどうか疑問に思っています。
現在の方法:
基本的に、次のことを行う必要があります。
c# - 改善されたIValueConverter-MarkupExtensionまたはDependencyObject?
IValueConverterを強化するための2つの異なるアプローチをオンラインで見ました。それらの1つはMarkupExtensionからValueConverterを拡張し、もう1つはDependencyObjectから拡張しました。私は両方から拡張することはできないので、どちらかがもう一方よりも優れているかどうか疑問に思いますか?
c# - コードからカスタム MarkupExtension を設定する
MarkupExtension
コードからカスタムを設定するにはどうすればよいですか?
Xamlからなら簡単に設定できます。Binding
と についても同様DynamicResource
です。
コードビハインドで同じ値を設定するには、少し異なるアプローチが必要です
バインディング: textBox.SetBinding または BindingOperations.SetBinding を使用します。
/li>DynamicResource: SetResourceReference を使用
/li>CustomMarkup:
/li>MarkupExtension
コードからカスタムを設定するにはどうすればよいですか?ProvideValue
その場合、どうすれば a を取得できますIServiceProvider
か?*
この件に関して驚くほどほとんど見つけられなかったので、できますか?
HBは質問に答えました。なぜこれをやりたかったのか、ここにいくつかの詳細を追加するだけです。次の問題の回避策を作成しようとしました。
問題は、封印されているため、派生しBinding
てオーバーライドできないことです。ProvideValue
代わりに、次のようなことを行う必要があります: A base class for custom WPF binding markup extensions。しかし、問題は、 aBinding
を a に返すSetter
と例外が発生することですが、それ以外ではStyle
正常に動作します。
が実際に適用された後に再評価できるようにする場合は、MarkupExtension
それ自体を返す必要があることをいくつかの場所で読みましたが、これは理にかなっています。TargetObject
Setter
FrameworkElement
ただし、それTargetProperty
は が typeobject
の場合にのみ機能し、それ以外の場合は例外が返されます。ソースコードをBindingBase
見ると、まさにこれを行っていることがわかりますが、フレームワークにはそれを機能させる秘密の要素があるようです。
wpf - 現在のバインディング値
マークアップ拡張機能を書いています。私はこのようなXAMLを持っています
コンストラクターが1つの文字列引数を取るTestExtension。「SomeInfo」文字列を取得しているので、すべてが見つかります。今、私は拡張機能をネストして、次のようなものを書きたいです
そのままでは動作しません。System.Windows.Data.Binding型の引数を1つ取るコンストラクターを追加する必要がありました。
今私は知る必要があります
- Bindingオブジェクトから現在の値を取得するにはどうすればよいですか?
- いつこれを行う必要がありますか?何らかの方法で変更をサブスクライブする必要がありますか、それともProvideValueメソッドで毎回その値を要求する必要がありますか?
Update1 PropNameは、TextBlockのDataContextに対して解決する必要があります。
Update2関連する質問が見つかりました:データバインディングの値を解決するにはどうすればよいですか?