В моих 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>
Теперь предположим, что мне нужно, чтобы каждый элемент, содержащийся в моей сетке, имел Margin = "3,1" VerticalContentAlignment = "Left" VerticalAlignment = "Center". Этого можно добиться несколькими способами:
<Setter Property = "Frameworkelement.Margin" Value = "3,1" /> Неплохо ... он правильно применяет стиль к каждому элементу в его содержимом, но также применяет его непосредственно к самой сетке ... не совсем то, что я хочу .Итак, какой подход вы выберете и почему? Что работает лучше всего?





Вы можете использовать №4, но затем явно переопределить эти свойства в самой сетке.
Проверь это.
Я считаю их большим подспорьем для бизнес-приложений. Исходный код доступен, поэтому, даже если вы не используете библиотеку, вы можете получить представление о том, как создать глобальный стиль.
Вы можете поместить «глобальный» стиль в секцию сетки Resources, тем самым ограничив его влияние. Чтобы повторно использовать «глобальные» стили в разных местах, поместите их в словарь ресурсов не по умолчанию и включите его как MergedDictionary:
в Styles.xaml:
<ResourceDictionary xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key = "{x:Type ...}"> ... </Style>
</ResourceDictionary>
в виде:
<Grid>
<Grid.ColumnDefinitions.../>
<Grid.RowDefinitions.../>
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source = "Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- other resources here -->
</ResourceDictionary>
</Grid.Resources>
...
</Grid>
Вот решение, которое я придумал, используя прикрепленное свойство:
Раньше работала с Карлом. Я обсуждал с ним это решение, но даже он сказал, что, вероятно, поступит иначе.