我有我創建的繼承FrameworkElement類的WPF控件。其中之一是這樣做的:何時在ContentControl和ItemsControl中使用DataTemplate?
[ContentProperty("Children")]
public class ItemsElement : FrameworkElement
{
public ItemsElement()
{
Children = new UIElementCollection(this, this);
}
public UIElementCollection Children { get; private set; }
protected override int VisualChildrenCount
{
get
{
if (Children != null)
{
return Children.Count;
}
return 0;
}
}
protected override Visual GetVisualChild(int index)
{
return Children[index];
}
protected override IEnumerator LogicalChildren
{
get
{
if (Children != null)
{
return Children.GetEnumerator();
}
return EmptyEnumerator.Instance;
}
}
protected override Size MeasureOverride(Size availableSize)
{
return availableSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
return finalSize;
}
}
我想要的代碼是有不是2D-UI元素的元素。我重寫了Measure和Arrange方法,以便它不計算孩子的大小。這是我想要的行爲,因爲這些計算是沉重且無用的。
問題是如果我把ContentControls和ItemsControls放入我的ItemsElement類的子項中(通過XAML),這些控件似乎並沒有使用我在資源中爲它們定義的DataTemplate從Content/ItemsSource生成它們的Visual子項。
,如果我在的MeasureOverride方法的開頭添加以下代碼,它工作:
foreach (UIElement child in Children)
{
child.Measure(availableSize);
}
我不明白爲什麼...
你有什麼想法?
謝謝!
請參閱[本文的這篇文章](http://stackoverflow.com/questions/21894063/how-to-use-datatemplate-with-frameworkcontentelement)知道爲什麼我擴展FrameworkElement而不是其他任何東西。你告訴我閱讀MSDN文檔,我已經做了,看到你'解釋'了,但是你沒有回答我的問題:什麼時候在ContentControl和ItemsControl中使用DataTemplate?也就是說在Measure方法的實現中,這對我來說是一個黑匣子。如果沒有幫助,不要說任何話。 – Hemel
請注意您的意見。當任何用戶花時間回答問題時,採取這種態度是不恰當的。如果你再次看到你的問題,你會發現你真的*問過這個'MeasureOverride'方法:*我不明白爲什麼......你有什麼想法?*這就是我正在回答的,所以也許你需要編輯你的問題來更清楚你實際想知道的內容,而不是侮辱這個網站的高級會員。 – Sheridan
是的,對不起。我對你的回答有點生氣。「閱讀文檔,小小的小白。」但我意識到原來的問題寫得不好......所以,再次抱歉! – Hemel