Как установить поля по умолчанию для всех элементов управления во всех моих окнах WPF? - PullRequest
17 голосов
/ 25 января 2012

Я хочу установить маржу по умолчанию 3 для всех элементов управления, которые я установил на всех своих окнах, и иметь возможность переопределить это значение только для очень небольшого числа элементов.

Я видел несколько подходовМне нравится делать стили, но тогда мне нужно стилизовать все, я бы предпочел что-то, что можно сделать для всех элементов управления вместе.Я видел другие вещи, такие как MarginSetter, но похоже, что он не пересекает подпанели.Я хочу, чтобы поле было только для элементов управления, которые я помещаю в окно, не имеет ничего общего с границами или другими элементами визуального дерева.

Для меня это выглядит довольно просто.Есть идеи?

Заранее спасибо.

Ответы [ 3 ]

19 голосов
/ 25 января 2012

Единственное решение, которое я могу найти, - это применить стиль к каждому из элементов управления, которые вы используете в окне (я знаю, что это не совсем то, что вы хотите).Если вы используете только несколько различных типов элементов управления, делать что-то вроде этого не слишком сложно:

<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>

Удачи ...

16 голосов
/ 01 марта 2013

Вы можете связать все свои свойства 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.

1 голос
/ 31 июля 2015

Вы можете применить маржу в стиле кнопок.А при использовании кнопок с этим стилем в StackPanel wpf будет применяться необходимый интервал.Например, определите в Resourcecedictionary или как угодно:

 <Style x:Key="myButtonStyle"  TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10"/>
....
</Style>

, затем в своем определении 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>

Относительно Georgi

...