2011-03-02 27 views
0

有沒有像Canvas.IsVisible(point)?我有一個CanvasScrollViewer。在畫布內部,我有一個自定義控件,應該始終在畫布的可見部分。WPF:有沒有像Canvas.IsVisible(點)?

enter image description here

有沒有一種方法,以確定畫布可見矩形或點?

+0

'BringIntoView'不適合你嗎?您可以確定任何父級控件何時更新其佈局並適當地執行此操作。 – 2011-03-02 14:31:02

+0

@Mr。失望:實際上我測試過,'BringIntoView()'將畫布移動到控件。我需要移動畫布上的白色控制。 – serhio 2011-03-02 15:25:06

回答

-3

你可以用帆布ZORDER財產,始終把你控制在畫布上的

+0

這完全沒有解決這個scrollviewer問題 – 2011-03-02 14:29:34

2

我創建了一個檢查元素是否是一個容器內完全可見的擴展方法上面:

public static bool IsUserVisible(this FrameworkElement element, FrameworkElement container) 
{ 
    if (!element.IsVisible) 
     return false; 

    var bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight)); 
    var rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight); 
    return rect.Contains(bounds); 
} 

在你的情況,你可以嘗試使用它像這樣:

myUserControl.IsUserVisible(scrollViewerWithMyCanvas); 
+0

另請參閱http://blogs.msdn.com/b/llobo/archive/2007/01/18/elements-visibility-inside-scrollviewer.aspx – 2011-03-02 14:28:44

+0

'ActualHeight'和'ActualWidth'是'NaN'?這是如何處理的,如果是這樣的話? – 2011-03-02 14:29:31

+0

@Robert - 感謝您的鏈接。它可能是有用的。 – 2011-03-02 14:31:23