問題タブ [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.

0 投票する
2 に答える
638 参照

wpf - Xaml テキストを MarkUp 拡張機能に基づくテキストに自動的に置き換える方法

次のような翻訳マークアップ拡張機能があります。

そして、すべてのプロジェクト xaml 内のテキスト タグを自動的に置き換える必要があります (xaml の翻訳に他のツールを使用できるため)。

このケースを実装するために、正規表現またはxmlリーダー/書き込みを使用してすべてのノードまたは属性を見つける方法はありますか?

0 投票する
1 に答える
378 参照

c# - MarkupExtension が wpf のクラスである理由

MarkupExtension クラスの逆コンパイルは次のようになります。

ご覧のとおり、インターフェイスとして実装することもできましたが、代わりにクラスです。WPF チームがこのように設計したのはなぜですか? また、Silverlight ではインターフェイスです。

0 投票する
0 に答える
173 参照

wpf - Extended WPF Toolkit から 2.0 にアップグレードすると、マークアップ拡張機能が壊れる

これは、Extended WPF ツールキットのバージョン 1.9.0 から 2.0.0 へのアップグレード後に、別の理由で遭遇した問題です。しばらく頭を悩ませていましたが、問題がコードにあるのか、それとも当時誰も考えていなかったものなのか、まだわかりません。

以前は、EditorDefinition の TargetType プロパティを使用して、いくつかの異なるデータ型に対して型ベースのカスタム エディターをセットアップする PropertyGrid スタイルを使用していました。これは明らかに 2.0.0 では機能しませんでした。これは、EditorDefinition が廃止されたためです。そのため、表示された警告メッセージに従って、EditorTemplateDefinition と TargetProperties を使用してスタイルを書き直しました。

https://gist.github.com/ceebrate/6695088

これが問題です。{arkane:Nullable} マークアップ拡張を使用する上位 2 つの EditorTemplateDefinitions をコメント アウトすると、残りのスタイル ({x:Type} マークアップ拡張を使用する 2 つの定義) が機能します。それらをそのままにしておくと、プロパティ グリッドを含むウィンドウが表示されるとすぐに、アプリケーションが XamlParseException でクラッシュし、System.RuntimeType を IList に変換できませんでした。

{arkane:Nullable} は、XAML で null 許容型を使用する機能を提供する TypeExtension の拡張機能であり、シンプルですがかなり標準的な (または少なくとも一般的に見られる) ものです。

https://gist.github.com/ceebrate/6695095

しかし、もっと重要なことは、これは TypeExtension の単純なサブクラスであり、EditorDefinition で TargetType に適用されたときに問題なく機能し、それ以来変更されていません。

どちらの側でも、変更のどの部分がこれを壊し、どのように修正するかについてのアイデアはありますか?

または、そのようなマークアップ拡張機能を使用せずに、Extended WPF Toolkit PropertyGrid のカスタム エディターを null 許容型に関連付ける方法はありますか?

0 投票する
1 に答える
793 参照

c# - WPF MarkupExtension と RowDefinition が NotImplementedException になる

シナリオ: Grid.Row=”0” を Grid.Row=”{namespace:ClassExtension GridRowName}” に置き換える MarkupExtension を作成します (列も同じ)

Xaml コード:

要件:

  • 正しくない GridRowName (または columnName) が使用されている場合に XAML エラーを表示する
  • 正しい GridRowName (または columnName) が使用されている場合に XAML エラーを表示しない
  • Row 宣言に有効な ColumnName が使用されている場合 (および vica verca)、XAML エラーが表示されます。

問題: Grid.Column ではすべて正常に動作しますが、Grid.Row は設計時に常に「実装されていない例外」をスローします (grid.row には下線が引かれ、grid.column には下線が引かれません)。 ここに画像の説明を入力

行と列の名前はどちらも正しいですが、行には常にエラーが表示されます。無効な列名を指定すると、列にエラーが表示されます (これは予想されることなので、Grid.Column は正常に動作します!) ここに画像の説明を入力

ご覧のとおり、列は正常に機能しますが、行は機能しません。問題は、GridDefinitionExtension と呼ばれる MarkupExtension 内にあります。

例外は次の行にあります。

このメソッドが呼び出された DLL を調べたところ、この ProvideValue メソッドの本体は次のようになっていることがわかりました。

この ProvideValue メソッドを簡略化して、シナリオで実際に使用しているコードのみを表示しました。

どうやら GetFixUpToken メソッドによって Exception がスローされているようですが、原因は Resolve メソッドにあります。この Resolve メソッドは、ColumnDefinition をその名前でルックアップすると有効なオブジェクトを返しますが、RowDefinition に対してまったく同じことを行うと NULL を返します。

GetFixUpToken によってスローされるエラーは、「NotImplementedException」です。これは、IXamlNameResolver のソースコード (この場合はタイプ: XamlNameResolverImpl) を見ると予想されるものです。

ここに画像の説明を入力

この XamlNameResolverImpl のソース コードを見ると、メソッド「GetFixUpToken」が空であり、NotImplemented 例外をスローしていることがわかります ( http://dotnetinside.com/en/framework/Microsoft+Expression/Microsoft.Expression.WpfPlatformを参照)。 /WpfMarkupExtensionValueSetter )

しかし、問題は、既に述べたように、Resolve 呼び出しです。これは、列定義では問題なく機能しますが、行定義では失敗します…

桁: ここに画像の説明を入力

行: ここに画像の説明を入力

この時点で、私はもう何をすべきかわかりません...

ソース コード (サンプル プロジェクト) は、http: //www.frederikprijck.net/stuff/MarkupExtension.rarで入手できます。

0 投票する
1 に答える
72 参照

c# - マークアップ拡張機能で他のコンポーネントの値を取得する

数日前にマークアップ拡張機能を使い始めたところ、ダンプの問題が発生しました。

プロパティを持つマークアップ拡張機能があり、stringユーザーが に入力した値を使用TextBoxしたくないのですが、簡単な方法はありますか?

だから私はそのようなものを持っています:

0 投票する
1 に答える
206 参照

c# - マークアップ拡張の短縮構文を完全な Xml 形式に変換する

次のような XAML 文字列があります。

次のようなコードですべての中かっこを要素に変換する方法:

0 投票する
1 に答える
1426 参照

c# - WPF - RelativeSource バインディングを使用してカスタム マークアップ拡張機能のデザイン時の値を提供する

注意: これは、カスタム マークアップ拡張機能に関するものだけではありません。重複としてマークする前にお読みください。

コンバーターを使用した WPF マークアップ拡張機能があり、そのうちの 2 つは次のようになります。

それらは私が設計しているカスタム ウィンドウ用です。ウィンドウが最大化されたときに、特定の値 (境界線の幅、マージンなど) を切り替えるために使用されます。ただし、設計時には常に null を返します。これは本当に面倒なことです。なぜなら、私のウィンドウは次のようになるからです。

Visual Studio でのウィンドウのプレビュー

...次のようになるはずの場合:

実行時のウィンドウ

(最初の画像でタイトルとアイコンが欠落していることは無視してください。ただし、解決策がある場合は、お気軽に回答してください。本質的には同じ問題です。)

明らかな理由から、これを使用して設計することは非常に困難です。ウィンドウのプレビューで見られる唯一の大きな問題は、拡張機能を使用して / を設定した場所です。null をRow返すColumnDefinitionと、Height/Widthが に設定され1*ます。したがって、私の質問は、おそらくバインディング (最大化されていない値など) の代わりに、設計時にデフォルト値を選択する方法があるかどうかです。

0 投票する
1 に答える
381 参照

c# - マークアップ拡張の命名

答えはノーだと確信していますが、マークアップ拡張機能を実装するクラスとは異なる名前を付ける方法はありますか?

比較的短い名前のマークアップ拡張機能を作成したいと思います。

しかし、C# 側で別の (長い) 名前を付けたいと思います:

命名について私が見つけた唯一の情報は、このページ*Extensionパターンにありますが、これは私が達成したいことではありません. これを可能にする属性が存在することを望んでいました:

しかし、System.Windows.Markup 名前空間のほとんどの属性を確認しましたが、残念ながらそのような属性はありません。

この問題の解決策はありますか?