在我的LOB應用程序中,我通常使用容器包含大量不同的文本塊和文本框供用戶輸入數據。通常我需要爲每個控件應用一定的邊距或垂直/水平對齊。將樣式應用於海量項目的最佳方法是什麼?
比方說,我有網我的形式,看起來像這樣(很多標記被除名的簡潔)上:
<Grid>
<Grid.ColumnDefinitions.../>
<Grid.RowDefinitions.../>
<TextBlock Text="MyLabel" />
<TextBox Text={Binding ...}/>
.
'
<!-- Repated a bunch more times along with all of the Grid.Row, Grid.Column definitions -->
</Grid>
現在讓我們說我需要包含在我的網格每一個項目有保證金= 「3,1」VerticalContentAlignment =「Left」VerticalAlignment =「Center」。有幾種方法可以實現這一點:
- 直接在每個控件上設置屬性 - 很壞!不允許剝皮或集中樣式。
- 使用x:Key =「MyStyleName」創建樣式並將樣式應用於每個控件。更好的...使樣式和皮膚集中化更易於管理,但仍需要大量標記,並且可能會變得笨拙。
- 創建一個全局樣式(即不指定一個x:Key並設置TargetType = {x:Type TextBox/TextBlock} - BAD !!問題是它會影響應用程序中的所有控件,這可能會對菜單,網格以及其他使用文本塊和文本框的控件造成不利影響
- 創建一個面向Grid的樣式並明確設置依賴性屬性值,如
<Setter Property="Frameworkelement.Margin" Value="3,1" />
不壞......它正確地將樣式應用於其內容中的每個元素,但也直接將其應用於網格本身...不完全是我想要的
那麼你採取什麼方法,爲什麼?
我用來和卡爾一起工作。我與他討論了這個解決方案,但他甚至表示他可能會以不同的方式做。 – Micah 2008-12-05 16:42:17