問題タブ [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# - マークアップ拡張機能とオブジェクトの作成
現在、私はこのようなマークアップを持っています
短くしたいのですが
ただし、DatePartValueConverterはMarkupExtensionから派生していないため、コンパイラはバーフします。DatePartValueConverterのインスタンスを作成するための短い形式のマークアップを取得する他の方法はありませんか?
ちなみに、MarkupExtensionから派生させてみましたが、問題は解決しました。私のProvideValueの実装は次のようになりました
そしてそれは機能しますが、私はその起源と性質、serviceProvider
そしてそれを使って何をすることが期待されるのかについてぼんやりとしています。
興味深いことに、このマークアップ拡張機能を使用するバインディングでVisual Studio 2012バインディングエディターを使用すると、すぐに再度拡張され、マークアップ拡張機能全体のサポートが少し無意味になりました。
内部状態を維持するため、バインディングごとにプライベートインスタンスが必要であることをおそらく言及する必要があります-このようないくつかの側面を設定するには、DateTime値全体を知る必要があります
wpf - XAMLのバインディング値にマークアップ拡張メソッドをどのように適用しますか?
文字列のローカリゼーションマークアップ拡張メソッドがあります。これは次のように適用できます。
このマークアップ拡張メソッドをバインディングの結果に適用するにはどうすればよいですか?つまり、そのようなもの:
wpf - DataBinding値を使用するMarkupExtension
テキスト翻訳クラスから翻訳されたテキストを提供するWPFMarkupExtensionクラスを作成しようとしています。翻訳はうまく機能しますが、翻訳されたテキストを返すには、テキストキーを使用した静的メソッド呼び出しが必要です。このような:
その専門は、より良い表現を提供するためにカウント値を受け入れることです。
別の例:何かがまだ4分かかる場合、それは1分しかかからない場合とは別の言葉です。テキストキー「minutes」が任意の数の「Minuten」および1のカウントの「Minute」として定義されている場合、次のメソッド呼び出しは使用する正しい単語を返します。
現在、WPFアプリケーションには、多くのXAMLコードがあり、それには多くのリテラルテキストが含まれています。ナッツを使わずに翻訳できるようにするには、テキストキーを渡すことができ、実行時に翻訳されたテキストを返すマークアップ拡張機能が必要です。この部分はかなり簡単です。MarkupExtensionから継承するクラスを作成し、テキストキーを引数として受け入れるコンストラクターを追加し、それをプライベートフィールドに格納し、そのProvideValueメソッドが格納されたキーの翻訳テキストを返すようにします。
私の本当の問題はこれです:マークアップ拡張機能がデータにバインドされ、カウント値が変更されたときにそれに応じて翻訳テキストが更新されるように、カウント値を受け入れるようにするにはどうすればよいですか?
次のように使用する必要があります。
FileCountのバインディング値が変更されるたびに、TextBlockは変更を反映し、適切な表現を提供するために新しいテキスト値を受け取る必要があります。
私はあそこに似たような解決策を見つけました:http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection。 aspxしかし、私がそれをフォローしようとすると、それが何をするのか、なぜそれが機能するのかさえ理解できません。すべてがWPF内で発生しているように見えます。提供されたコードは、WPFを正しい方向にプッシュするだけですが、その方法は不明です。私はそれを適応させて何か役に立つことをすることができません。
実行時に翻訳言語を変更することが役立つかどうかはわかりません。そのためには、別のレベルのバインディングが必要だと思います。複雑さを低く抑えるために、基本バージョンが機能するまではそうしようとはしません。
現時点では、お見せできるコードはありません。それは単にひどい状態にあり、それがする唯一のことは例外を投げるか、何も翻訳しないことです。簡単な例は大歓迎です(この場合、そのようなものが存在する場合)。
c# - 'System.Windows.Data.Binding' はプロパティ 'SelectedIndex' の有効な値ではありません
誰かがこのエラーに光を当てることができますか?
最初は、SelectedIndex はおそらく DependencyProperty ではなく、バインドできないと思っていましたが、間違っていました。
マークアップ拡張機能の代わりに通常のバインドを使用する場合src:ValidatedBinding
、またはマークアップ拡張機能を保持して のSelectedItem
代わりにバインドする場合はSelectedIndex
、機能します。
これは、問題を示す小さなアプリです。
メインウィンドウ:
メイン ウィンドウの背後にあるコード:
マークアップ拡張機能のコード:
このアプリケーションを実行したときの例外:
System.Windows.Markup.XamlParseException が発生しました
HResult=-2146233087 Message= 'Set property 'System.Windows.Controls.Primitives.Selector.SelectedIndex' が例外をスローしました。' 行番号 '9' および行位置 '19'。
Source=PresentationFramework LineNumber=9 LinePosition=19
スタックトレース: System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader、IXamlObjectWriterFactory writerFactory、ブール値の skipJournaledProperties、オブジェクト rootObject、XamlObjectWriterSettings 設定、Uri baseUri) で System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader、ブール値の skipJournaledProperties、オブジェクト rootObject) 、XamlAccessLevel accessLevel、Uri baseUri) の System.Windows.Markup.XamlReader.LoadBaml (ストリーム ストリーム、ParserContext parserContext、オブジェクトの親、Boolean closeStream) の System.Windows.Application.LoadComponent (オブジェクト コンポーネント、Uri resourceLocator) の WpfApplication2.MainWindow。 c:\Users\Administrator\Documents\Visual Studio 2012\Projects\WpfApplication2\MainWindow.xaml:c の WpfApplication2.MainWindow..ctor() の 1 行目の InitializeComponent():\Users\Administrator\Documents\Visual Studio 2012\Projects\WpfApplication2\MainWindow.xaml.cs: 12 行目
InnerException: System.ArgumentException HResult=-2147024809 Message= 'System.Windows.Data.Binding' はプロパティ 'SelectedIndex' の有効な値ではありません. ソース = WindowsBase StackTrace: System.Windows.DependencyObject.SetValueCommon (DependencyProperty dp、オブジェクト値、PropertyMetadata メタデータ、ブール coerceWithDeferredReference、ブール coerceWithCurrentValue、OperationType operationType、ブール isInternal) で System.Windows.DependencyObject.SetValue (DependencyProperty dp、オブジェクト値) でSystem.Windows.Baml2006.WpfMemberInvoker.SetValue (オブジェクト インスタンス、オブジェクト値) で MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue (XamlMember メンバー、オブジェクト obj、オブジェクト値) で MS.Internal.Xaml.Runtime.ClrObjectRuntime. SetValue (オブジェクトのインスタンス、XamlMember プロパティ、オブジェクトの値) InnerException:
wpf - ネストされた要素としてマークアップ拡張機能を記述する
属性ではなくネストされた要素としてマークアップ拡張を記述することは可能ですか? エントリBoolean
のキーとして使用しようとしています。ResourceDictionary
ResourceDictionary
キーの型が文字列である現在のコード:
必要なコードですが、次の理由でコンパイルされません:
タグ x:Key を認識できません
XAML
c# - WPF デザイナーでのマークアップ拡張引数の設計時チェック
私ができるようにするWPFのマークアップ拡張機能を作成しました
これは非常に便利な拡張機能であり、実行時にうまく機能します。ただし、設計時に適用されたスタイルが表示されないか、太字と斜体のタイプを間違えると、それらが StaticResources として見つからない可能性があります。
これを機能させるためにできるハックはありますか?
拡張機能のソースコードは
wpf - WPF の状態を使用したマークアップ拡張機能
WPF マークアップ拡張インスタンスがコントロール テンプレートで再利用されていることを発見しました。したがって、コントロール テンプレートの各コピーは、同じセットのマークアップ拡張機能を取得します。
拡張機能がアタッチされているコントロールごとに何らかの状態を維持するようにしたい場合、これは機能しません。これを解決する方法はありますか。
wpf - MultiBinding で DynamicResource を使用することはまったく可能ですか?
この場合、Text
プロパティのバインディングの一部としてリソース ディクショナリで宣言された文字列を使用しようとしています。動的リソース文字列を 1 つだけバインドすることは問題ではありません。
ただし、動的テキストを挿入する必要があるか、複数の文字列を結合する必要があるため、 MultiBindingでStringFormatを使用する必要がある場合は、すぐに問題が発生します。たとえば、MultiBinding が次のようになっているとします。
string1
指定したリソース ファイルからバインドされたテキストに挿入できstring2
ますが、問題はありません。しかし、同じ方法で動的リソースから文字列を使用する方法が見つかりません。(私はこのメソッドを使用して、マージされたリソース ディクショナリから会社名と製品名をテキストに挿入しています)。
TextBlockを使用すると、TextBlock コンテンツに複数のRunアイテムを使用することで、この問題を回避できます (参照)。
ただし、動的リソースをWindow Titleプロパティにバインドする必要がある場合、これは役に立ちません。既存のマークアップ拡張機能 (など) を使用して (必要に応じて創造的に) これを達成する方法はありx:Static
ますか? それとも、これを実現するために独自のマークアップ拡張機能を作成する必要がありますか?
c# - Converter でマークアップ拡張機能を作成する
HTML の文字列を取り、それを FlowDocument に変換し、FlowDocument を返すマークアップ拡張機能を作成しようとしています。私はマークアップ拡張機能の作成にかなり慣れていませんが、これがより経験のある人には明らかであることを願っています。これが私のコードです:
更新: これが XAML です。
そして私のVSエラーリスト:
- エラー 3 マークアップ拡張機能の解析中に、タイプ 'MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension' の不明なプロパティ 'Source' が検出されました。行 89 位置 49。
- エラー 1 型 "HtmlToXamlExtension" には、指定された数の引数を持つコンストラクターが含まれていません。
- エラー 2 タイプ 'HtmlToXamlExtension' のコンストラクターに 0 パラメーターがありません。