Как установить маржу по умолчанию для всех элементов управления во всех моих окнах WPF?
Я хочу установить по умолчанию Margin of 3 для всех элементов управления, которые я помещал во все мои окна, и иметь возможность переопределить это значение только на очень немногих элементах.
Я видел некоторые подходы, такие как стили, но тогда мне нужно все стилизовать, я бы предпочел что-то, чем можно было бы сделать для всех элементов управления вместе. Я видел другие вещи, такие как MarginSetter, но похоже, что он не пересекает подпанели. Я хочу, чтобы маржа была только на элементах управления, которые я помещал в окно, не имеет ничего общего с границами или другими вещами визуального дерева.
Выглядит что-то довольно простое для меня. Любые идеи?
Спасибо заранее.
Ответы
Ответ 1
Единственное решение, которое я могу найти, - применить стиль к каждому из элементов управления, которые вы используете в окне (я знаю, что не совсем то, что вы хотите). Если вы используете только несколько различных типов управления, это не слишком тяжело, чтобы сделать что-то вроде этого:
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<!-- One style for each *type* of control on the window -->
<Style TargetType="TextBox">
<Setter Property="Margin" Value="10"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="10"/>
</Style>
</Window.Resources>
<StackPanel>
<TextBox Text="TextBox"/>
<TextBlock Text="TextBlock"/>
</StackPanel>
</Window>
Удачи...
Ответ 2
Вы можете связать все свои свойства Margin, указав "Толщина", определенную в ваших ресурсах. Я просто сделал это в проекте...
<!-- somwhere in a resource-->
<Thickness x:Key="CommonMargin" Left="0" Right="14" Top="6" Bottom="0" />
<!-- Inside of a Style -->
<Style TargetType="{x:Type Control}" x:Key="MyStyle">
<Setter Property="Margin" Value="{StaticResource CommonMargin}" />
</Style>
<!-- Then call the style in a control -->
<Button Style="{StaticResource MyStyle}" />
<!-- Or directly on a Control -->
<Button Margin="{StaticResource CommonMargin}" />
Ключ для меня заключался в том, что Марджин определялся "Толщина". Дайте мне знать, достаточно ли это достаточно или вам нужно, чтобы я положил его в полностью рабочий пример XAML.
Ответ 3
Вы можете применить марку в стиле кнопок. И когда вы используете кнопки с этим стилем в StackPanel, wpf применит необходимый интервал.
например
определить в resourcedictionary или что-то еще:
<Style x:Key="myButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10"/>
....
</Style>
то в yor StackPanel определение xaml:
<StackPanel>
<Border BorderThickness="0"/>
<Button x:Name="VertBut1" Style="{StaticResource myButtonStyle}" Content="Button1"/>
<Button x:Name="VertBut2" Style="{StaticResource myButtonStyle}" Content="Button2"/>
<Button x:Name="VertBut3" Style="{StaticResource myButtonStyle}" Content="Button3"/>
</StackPanel>
С уважением
Георги