Ответ 1
если все элементы управления одинаковы, тогда сделайте так, как предлагалось IanR, и реализуйте стиль, который ловит этот элемент управления. если это не так, вы не можете создать стиль по умолчанию для базового класса, потому что он просто не будет работать.
лучший способ для подобных ситуаций - использовать очень аккуратные свойства, привязанные к трюку (aka Behaviors в 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>
Полностью повторное использование, конечно.