AddLogicalChildを使用したUIElement、AddVisualChildをWPFで追加します -- wpf フィールド と panel フィールド と uielement フィールド 関連 問題

Adding UIElement with AddLogicalChild, AddVisualChild in WPF












3
vote

問題

日本語

パネルから拡張/継承することでカスタムバージョンのキャンバスを作成しました。

描画またはレンダリングしたい場合は、 DrawingVisual を作成し、目的のグラフィックを描画し、<コード> AddLogicalChild(Visual) 、<コード> 99887664 そしてパネルのビジュアルの数を増やす。

これは、 DrawingVisual インスタンスを追加しているときは、 Button を追加して寸法を定義しようとしている場合( MinHeight 、 <コード> MinWidth )は表示されません。

<コード> UIElements 998876611 に <uib-tabset> <uib-tab heading="FEATURED" active=true > <br><br> </uib-tab> <uib-tab heading="RECENTLY USED"> <br><br> RECENTLY USED </uib-tab> <uib-tab heading="TOP RATED" > <br><br> TOP RATED </uib-tab> <uib-tab heading="NEAR ME" ng-click="loadmap()"> <br><br> <div class="single-map-view" id="mapview"> <ui-gmap-google-map center='fullmap.center' zoom='fullmap.zoom' refresh="true"> <ui-gmap-marker idkey="fullmap.id" coords="fullmap.center" events="fullmap.events"></ui-gmap-marker> </ui-gmap-google-map> </div> </uib-tab> </uib-tabset> 0 を追加する方法は、表示され、それを使って操作できますか?

英語

I created a custom version of canvas by simply extending/inheriting from the Panel.

When I want to draw or render something on it, I simply create a DrawingVisual, draw the desired graphics and call the AddLogicalChild(Visual), AddVisualChild(Visual) and incrementing the count of the Visuals of the Panel.

This works great when I am adding DrawingVisual instances, but when I try to add a Button here and define the dimensions (MinHeight, MinWidth), it is not displayed.

Is it possible that UIElements need a different logic of handling to be displayed? Basically, how can I add a UIElement to that extended Panel that would be displayed and could be manipulated with?

</div
        

回答リスト

1
 
vote

UIElement s だけで動作する場合は、その項目を Children コレクションに追加することです。

しかし UIElement sと Visual s の混合があれば、 AddLogicalChild / <コード> AddVisualChild Children6 。しかし、それは少しもっと仕事を必要としています:

  1. AddLogicalChild および Children0を使用して、 Visual s)を論理的およびビジュアルの子として追加します。 /コード>。
  2. 商品をどこかに保管してください(パネルはあなたのためにそれをしない)
  3. オーバーライト<コード>および<コード>および<コード>および<コード>および<コード>および渡された索引の項目/項目の数を返す
  4. HOVER WRITE MEASEOVERRIDE、各<コード> Children4 で<コード> Children13 を呼び出し、パネル
  5. に固有のすべての他の測定値を実行します。
  6. ArrangeOverride、 Children616161 の<コード> Children5 を呼び出し、パネル
  7. に固有のすべてのアレンジのものをすべて行います。

    <コード> Children7 および Children8 は、 Children9 にUIElementが追加されました。

    それは。 :)

 

If working only with UIElements, the prefered way is to add that items to the Children collection.

But if you have a mixture of UIElements and Visuals, I would suggest to use the methods AddLogicalChild / AddVisualChild instead of Children. However, that requires a little bit more work:

  1. Add the item (Visuals as well as UIElements) as logical and visual children, using AddLogicalChild and AddVisualChild.
  2. Store the items somewhere (the Panel wont do it for you)
  3. Overwrite GetVisualChild and VisualChildrenCount and return the number of items / the item on the passed index
  4. Overwrite MeasureOverride, call UIElement.Measure on each UIElement and do all the other measure stuff that is specific for your panel
  5. Overwrite ArrangeOverride, call UIElement.Arrange for each UIElement and do all the other arrange stuff that is specific for your panel

Note that Measure and Arrange have to be called after the UIElement has been added to the Panel.

Thats it. :)

</div
 
 
0
 
vote
< UIElement0 の場合、それは使用するコレクション<コード> UIElement1 です。 <事前> <コード> UIElement2

internalChildren < / a> <コード> Children23 sの拡張機能で使用することをお勧めします。

 

For UIElements, it's the Collection Children to use:

public void AddChild(UIElement newChild) {    this.Children.Add(newChild); } 

You should also look at the InternalChildren Collection which is recommanded to use in extensions of Panels.

</div
 
 
   
   
0
 
vote

その機能はすでに含まれています。 UIElement4 UIElement5 に追加したい場合は、通常の UIElement7 と同じように、 Children26 を使用してください。 <コード> UIElement8 など。

実装では、 UIElement9 と<コード>と<コード> 998877630 を上書きして、子供を繰り返し、 Visual1 Surfaceで編成します。

例: http:// msdn.microsoft.com/en-us/library/ms754152(v=vs.110).aspx#panels_custom_panel_elements

 

That functionality is already included. If you want to add UIElements to your Panel, simply use .Children.Add() - just like you do with the regular Canvas, Grid etc.

Then in your implementation, override MeasureOverride and ArrangeOverride to iterate through the children and organize them on your Panel surface.

Example here: http://msdn.microsoft.com/en-us/library/ms754152(v=vs.110).aspx#Panels_custom_panel_elements

</div
 
 

関連する質問

0  UiElementのレンダリングにより、アプリが数秒間ハングアップする  ( Render of uielement causes app to hang for several seconds ) 
私はWPFアプリケーションを持っています - デザインパターンのためのMVVMを使用しています。 メインビューでは、対応するViewModelのプロパティにバインドされている cudaDeviceSynchronize returned error code ...

4  OS X:アプリケーションエージェントのインターフェイス(UIElement)の表示  ( Os x show interface of application agent uielement ) 
「アプリケーションがエージェント(UIElement)」のアプリケーションのインタフェースを肯定したアプリケーションのインタフェースを再表示にしますか? インターフェースは、アプリを起動したときに初めて表示されますが、ウィンドウを閉じてアプリのアイコンをクリッ...

0  Silverlightの子供のUIElementを削除するLINQ  ( Linq to delete uielement in silverlight children ) 
<事前> <コード> foreach (UIElement el in GridBoard.Children.ToList()) { if (el is Ellipse) { GridBoard.Children.Remove(el)...

0  文字列をUI要素名に変換する - 勝つ8  ( Convert string to a ui element name win 8 ) 
見出しは、私が達成しようとしているものを明確に説明しないかもしれません。これが私が必要とするものです。私は文字列の配列を持っています。その名前のUI要素があります。例えばARR [0]にはACHがあります。 ACHという名前のチェックボックスがあります。 ど...

1  InvalidOperationExceptionがでパネルの結果にするUIElementを追加する「を別の要素のすでにlogicial子」  ( Adding uielement to a panel results in an invalidoperationexception already log ) 
[OK]を、あなたのほとんどは、「新しいパネルに追加する前に、その前の親から、あなたの要素を削除する」と言うだろう。私はすでに他の状況で、この何回も適用され、そしてそれは、この特定のケースでの作業をしない理由を私は説明できない、ということを知っています。 こ...

2  WindowsフォームアプリケーションにUIElementを追加する方法  ( How can i add a uielement to a windows forms application ) 
私はWindowsフォームアプリケーションに追加したいWPFカスタムコントロールを持っています。 そのため、WPFアセンブリへの参照を追加し、ElementHostを作成し、子プロパティをコードに設定しました。 コードを書くことなくドラッグアンドドロップieで...

8  Silverlightコントロールをマウスのアクションに見えないようにするにはどうすればよいですか。  ( How can i make silverlight controls invisible to mouse actions ) 
UIElement にマウスクリックを無視し、その背後にあるコントロールに渡すにはどうすればよいですか。 私は50%の透明な<コード> UIElement <コード>が他の要素を網羅しています。バックグラウンド要素をクリックしようとすると、マウスクリックは...

0  データがタイプUIElementであるデータバインディング  ( Databinding where the data is of type uielement ) 
コレクションビューモデルにバインドされている DataGrid があります。要素ビューモデルには、 myObj: { person: "John", age: "20" }; 0 の型のUIというプロパティがあります。シナ...

0  グリッドからすべての項目のサイズを変更します  ( Change size of all items from a grid ) 
私はいくつかのグリッド内のすべてのアイテムの幅を変更しようとし、WICHもグリッドにあります。項目はテキストボックス、チェックボックス、スライダ、ボタンなどです。 これは私の解決策アプローチです: <事前> <コード> foreach (Control ite...

0  WPF UIElementをどのように和らげることができますか?  ( How can i reparent a wpf uielement ) 
UIElement を別のウィンドウに返済する方法ウィンドウを閉じる前に、コンテンツをNULLに設定しました。その後、新しいウィンドウが開始され、<コード> UIElement がそのウィンドウの内容に設定されます。 これはInvalidOperation...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有