ScrollViewer
不是一個附加屬性;這是一堂課。
ScrollViewer.HorizontalScrollBarVisibility
是附屬財產。但它不是ListBox
「擁有」的附屬財產;它是一個附加的屬性,可以連接到任何DependencyObject
,包括ListBox
。
如果您右鍵點擊ScrollViewer.SetHorizontalScrollBarVisibility
和ScrollViewer.GetHorizontalScrollBarVisibility
,以下是您看到的內容。像這樣的一對靜態方法對於附加屬性是必需的。第一個參數是你將屬性附加到的東西。它不一定是DependencyObject
;它可能是FrameworkElement
,ListBox
,ItemsControl
或其他任何可以支持依賴項屬性的東西。
// Summary:
// Sets the value of the System.Windows.Controls.ScrollViewer.HorizontalScrollBarVisibility
// dependency property to a given element.
//
// Parameters:
// element:
// The element on which to set the property value.
//
// horizontalScrollBarVisibility:
// The property value to set.
public static void SetHorizontalScrollBarVisibility(DependencyObject element, ScrollBarVisibility horizontalScrollBarVisibility);
//
// Summary:
// Gets the value of the System.Windows.Controls.ScrollViewer.HorizontalScrollBarVisibility
// dependency property from a given element.
//
// Parameters:
// element:
// The element from which the property value is read.
//
// Returns:
// The value of the System.Windows.Controls.ScrollViewer.HorizontalScrollBarVisibility
// dependency property.
public static ScrollBarVisibility GetHorizontalScrollBarVisibility(DependencyObject element);
的ListBox
本身很可能有什麼線索ScrollViewer.HorizontalScrollBarVisibility
手段,甚至可以說,它的存在。但在ListBox
的模板,有可能是一個ScrollViewer
,這將可能有一個結合了很多像這樣的:
<ScrollViewer
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
把那附着在任何控件的屬性可能在其模板有一個ScrollViewer
,如果模板被正確寫入,ScrollViewer
將使用該值。
這真的很好,因爲ListBox
不必考慮自己的滾動行爲。這全部委託了。通過構圖構建控件非常強大。
不足之處在於,整個事物只是一個無差異的大瓶子,真正難以理解。如果沒有人在之外,那麼特定ListBox
的模板在甚至可以猜測該滾動行爲可能是什麼,但Intellisense無法告訴您有關滾動行爲的更多信息ListBox
。
所以,回答你的問題:是的。基本上你只需要閱讀很多東西。並保留一個「酷XAML技巧」文本文件記下你聽到的很酷的東西,你還沒有使用。
但這就是這個行業一直的方式。即使使用Intellisense,也不能使用您不瞭解的課程。
今天我學到了ColumnDefinition.SharedSizeGroup
和Grid.IsSharedSizeScope
,我瞭解到,你可以從MarkupExtension
獲得價值轉換器,並給他們,而不是有一些愚蠢的字符串傳遞到CommandParameter
強類型,命名屬性。
謝謝,這是真的ListBox有一個ScrollViewer,它是該對象的屬性正在'ScrollViewer.HorizontalScrollbarVisibility'。雖然很明顯listbox可以滾動,但確實會拼出使用IntelliSense或其他工具,而不是絆倒某些文檔,某個地方,某天,比如'ColumnDefinition.SharedSizeGroup'學到了。 WPF無法像Winforms控件一樣被發現。所以當有人問我WPF程序員有多好時,答案是,我不知道。 –
@DavidChing ScrollViewers是如何在WPF中滾動的。學習的一個好方法是右鍵單擊XAML desginer視圖中的東西(這是我發現的唯一有用的東西)並查看其模板。但有人可以用一個沒有ScrollViewer的模板來替換模板,而某些螺母可以給一個特定的RadioButton一個有ScrollViewer的模板。它的本質就是你有這個可以在任何地方出現的大盒子。這不僅僅是它沒有很好的記錄,從某種意義上說,它在一般水平上幾乎是不可知的。 –
這是關於它是不可知的一個很好的觀察,並提示查看模板,謝謝。 –