если все элементы управления одинаковы, выполните действия, предложенные IanR, и реализуйте стиль, который перехватывает этот элемент управления.если это не так, вы не можете создать стиль по умолчанию для базового класса, потому что он просто не будет работать.
лучший способ для подобных ситуаций - использовать очень аккуратные свойства с привязкой к трюкам (иначе поведение)в WPF4)
вы можете создать класс с вложенным свойством, например так:
public class MarginSetter
{
public static Thickness GetMargin(DependencyObject obj)
{
return (Thickness)obj.GetValue(MarginProperty);
}
public static void SetMargin(DependencyObject obj, Thickness value)
{
obj.SetValue(MarginProperty, value);
}
// Using a DependencyProperty as the backing store for Margin. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MarginProperty =
DependencyProperty.RegisterAttached("Margin", typeof(Thickness), typeof(MarginSetter), new UIPropertyMetadata(new Thickness(), CreateThicknesForChildren));
public static void CreateThicknesForChildren(object sender, DependencyPropertyChangedEventArgs e)
{
var panel = sender as Panel;
if (panel == null) return;
foreach (var child in panel.Children)
{
var fe = child as FrameworkElement;
if (fe == null) continue;
fe.Margin = MarginSetter.GetMargin(panel);
}
}
}
сейчас, чтобы использовать его, все, что вам нужно сделать, это прикрепить это присоединенное свойство клюбая панель, которую вы хотите, например, так:
<StackPanel local:MarginSetter.Margin="10">
<Button Content="hello " />
<Button Content="hello " />
<Button Content="hello " />
<Button Content="hello " />
</StackPanel>
Полностью многоразовая конечно.