問題タブ [contentcontrol]
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 - テンプレート内のトリガーが間違ったレンダリングを引き起こす
私はTabControl
IE8タブのように見える独自の偽物を実装しています(タブコントロールの他の実装を認識しています)。
MyTabControl
は から派生しSelector
、 My は からTabItem
派生しContentControl
ます。タブが選択されたら、IsSelected
(依存関係プロパティ) を true に設定します。私Trigger
はこのように見えます:
my のデフォルトのマージンTabItem
は 0,2,0,0 です。つまり、選択されていないTabItem
s は、選択された s に対してわずかにオフセットする必要があります。これを逆にして、代わりに高さを使用してみました。その結果TabItem
、マージンが変更されるのではなく、選択された s が切り取られたように見えます。プロパティがタグに直接設定されている場合、正しいビジュアルが得られます。つまり、次のようになります。
Arrange
を無効にしようとVisual
しMeasure
ましたが、IsSelected
依存関係プロパティであまり成功しませんでした。
ここで何が欠けていますか?
編集:
の完全なスタイルは次のTabItem
とおりです (スタイルは部分的にこのプロジェクトに基づいています: http://www.codeproject.com/KB/WPF/WpfTabControl.aspx ):
wpf - コンテンツ 対。
次の2つのオプションがあります。
対。
- パフォーマンスの違いはありますか?
- 何が読みやすいと思いますか?
- 結論?
この質問はどういうわけか赤ちゃんっぽく聞こえるかもしれませんが、質問しないかどうかはどうすればわかるので、撮影することにしました。
私が間違った決定を選んだ場合は私にコメントしてください;)
c# - TabControlの別のタブでコンテンツコントロールをレンダリングします
TabControl
プログラムでオブジェクトに動的に追加される複数のタブがあるプログラムがあります。私がやりたいのは、これらの各タブのコンテンツ値をPNGにレンダリングすることです。StackOverflowまたはおそらくGoogle(ソースを失った)の他の場所で取得したスクリプトを使用しています。私のコードは次のようになります。
このコードを呼び出す前にレンダリングする必要のあるすべてのタブを確認して確認した場合、このコードは希望どおりに機能します。先に進み、TabContentControlからレンダリングされた正しいコンテンツを使用してfilePrefix_1.png、filePrefix_2.pngなどを作成します。ただし、すべてのタブを表示する前にこのコードを使用するハンドラーを呼び出すと、コードはで例外をスローnew RenderTargetBitmap(...)
しcontent.RenderSize
ます{0.0, 0.0}
。表示されていないタブのレンダリングサイズを一度表示されたタブの1つに強制しようとすると、出力されたPNGは正しいサイズですが、完全に空です。
したがって、TabContentControlのレンダリングを強制する方法が必要だと思います。Renderイベントは、UIElementをレンダリングする必要がある場合にのみ実行されるようです。これを回避するために私が実行できるトリックはありますか?
また、Page_Loadedイベントハンドラーでタブの作成時に次のコードを追加することにより、WPFを「だまして」タブコンテンツをペイントしようとしました。
ハンドラーの最後の行Page_Loaded
がコメント化されると、最後のタブにフォーカスがRenderSize
置かれ、そのコンテンツに対してプロパティが定義されます。最後の行がコメントアウトされていない場合、最初のタブにフォーカスがあり、同じ動作をします。他のタブにはレンダリング情報がありません。
wpf - カスタム スプラッシュ スクリーン .Close() 使用時の ContentControl レンダリング バグ - 何が起こっているのか?
ContentControl
さまざまな種類のコンテンツ間で非常に基本的な切り替えを使用します。
ランダムに (すべての実行の 20% のように) ビューが表示されると、完全に透明に表示されますが、その背後にあるコントロールが入力を受け取ることはできません。
ウィンドウで Snoop を使用しようとすると、ビューが即座にレンダリングされます。ビューは入力を受け取り、想定されるテキスト ボックスにカーソルを合わせるとマウス カーソルを変更します。「見えない」ビューで任意のボタンを押すと、すぐにポップアップします。
ContentControl
からに切り替えてContentPresenter
も、上記の動作は変わりません。
何が起こっているのか、それを修正する方法を知っている人はいますか?
編集: WPFのバグのように見えるので、この問題を経験した人がいるといいのですが。
編集:私はそれをカスタムスプラッシュスクリーンウィンドウまで追跡しました。正確.Close()
には、ウィンドウを取り除くために使用しました。代わりに使用.Hide()
すると、不具合は発生しません。まだ理由がわかりません。
wpf - DataTemplateSelector から DataTemplate を明示的に更新しますか?
ContentControl.DataTemplateSelector を目的のものに設定しました。
コマンドなどに従って、ContentControl を呼び出して、xaml またはコードのいずれかでセレクターからテンプレートを再選択します。
感謝
wpf - DataTrigger を介して ContentTemplate を設定できません
ContentTemplate
の値に応じて を変化させたいDataTrigger
。
はい、私は を使用することを検討しましたDataTemplateSelector
が、今は が必要DataTrigger
ですMultiDataTrigger
。
次のサンプル アプリを見てくださいDataTemplate
。変更はありません。
wpf - ContentControl + RenderTargetBitmap + 空の画像
これらのチャートを画面に表示することなく、いくつかのチャート画像を作成しようとしています。私はかなり長い間これに携わっていて、さまざまなことを試しましたが、何もうまくいかないようです。最初にチャートをウィンドウに表示すると、コードは完全に機能しますが、ウィンドウに表示しないと、ビットマップは白と黒の境界線だけになります (理由はわかりません)。
レンダリングする前に境界線にグラフを追加して、境界線に緑色のborderBrushを追加しようとしました。ビットマップでは、緑の borderBrush が表示され、次に黒の境界線と白の背景が表示されますが、グラフは表示されません。チャートは黒いボーダーに含まれていないので、それがどこから来ているのかわかりません。
window.Show() を呼び出さずにチャートをウィンドウに追加しようとしましたが、再び黒いボーダーと白い背景が表示されます。ただし、window.Show() を呼び出すと、ビットマップにチャートが含まれます。
hereで説明されているように、drawingVisual を使用してみましたが、同じ結果です。
コードは次のとおりです (境界線またはウィンドウへの要素の追加は含まれません)。
注: グラフは ContentControl です。
最初にウィンドウに表示せずにチャートをレンダリングする方法はありますか?
mvvm - ContentControls の DataTemplate のデフォルトの可視性
私の MVVM ベースの WPF アプリケーションには、ContentControls または ContentPresenters に動的にロードされるさまざまな ViewModel タイプがたくさんあります。そのため、XAML で使用する DataTemplate を明示的に設定する必要があります。
<ContentControl Content={Binding SomePropertyOfTypeViewModel} ContentTemplate={StaticResource someTemplate} />
someTemplate
現在、私の問題は、ContentControl が何もバインドされていない (つまり、ViewModel.SomePropertyOfTypeViewModel が null である) 場合でも、コンテンツ コントロールが UI を表示していることです。暗黙の DataTemplates を使用すると、すべてが期待どおりに機能します。残念ながら、ここではこのメカニズムを使用できません。
アップデート:
bool Visible
私の現在の解決策は、親 ViewModel でプロパティとして公開されている ViewModel ごとに 1 つの追加のプロパティを持つことです。true
プロパティが null でない場合にのみ返されます。ContentControl の Visilibilty は、このプロパティにバインドされています。
ParentViewModel.SomePropertyOfTypeViewModelVisible, ParentViewModel.SomeOtherPropertyOfTypeViewModelVisible ...
多くの余分なプロパティを維持する必要があるため、これはあまり満足のいくものではありません。
wpf - ContentControls を使用した自動 RowDefinitions グリッド
RegionManager によって読み込まれた 2 つの ContentControls を持つページがあります。アイテムのリスト、およびこれらのアイテムの DetailView。問題は、グリッドが私が好きだった自動高さを適用しないことです。そこで、使用可能な画面サイズをすべて grid.row=0 にしたいと考えています。以下にコードを追加しました。
c# - ContentControl での双方向バインディング
キーと値のペア エディターを作成していますが、値にデータ型に基づくカスタム テンプレートを持たせたいと考えています。
ホスト クラスの分離コードは次のようになります。
DataTemplates は、リソース クラスを介して選択されます。
文字列に対して表示される DataTemplate は次のとおりです。
データは、キー TextBox (txtKey) および DataTemplate TextBox (txtTextIET1) に正常にバインドされますが、txtTextIET1 の値を変更しても、KeyValuePair プロパティのセッターはトリガーされません。このシナリオの例を見つけることができなかったので、助けていただければ幸いです。