Окно. Поле и Окно. Дополнение не работает

Я устанавливаю peroperty Поле и Дополняю окна, и оно не вступает в силу:

Вот пример:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    SizeToContent="WidthAndHeight"
    ResizeMode="NoResize"
    Padding="22"
    Margin="22">

    <Grid>
        <Label 
            FontWeight="Bold"
            FontSize="36"
            BorderThickness="1"
            BorderBrush="Red"
            Content="Hello world!"/>
    </Grid>
</Window>

Результат:
alt text

Желаемый результат состоит в том, что красный кадр маркировки должен находиться далеко 44 пкс от кадра окна (margin+padding).

Да, я знаю, что могу установить поле маркировки, но это не то, что я хочу. У меня есть целый проект, что все его окна установлены на стиль, я хочу установить это свойства (или другой) в общем стиле окна.

Я предполагаю, не найду ли я решения, я создам названный стиль для жадности, где я установлю поле/дополнение, затем я пойду Окно окном и установлю стиль Сетки, но это - последняя опция, которую я хочу сделать.
Заранее спасибо.

17
задан Community 8 February 2017 в 14:19
поделиться

1 ответ

Неудивительно, что Margin не работает, потому что Margin - это количество места, которое нужно разместить вокруг элемента управления. Для Window это означало бы уменьшение размера фрейма (и смещения), а не клиентской области, и это было бы немного странно (и может не очень хорошо работать со средой размещения Win32, не уверен). немного удивляет, что Padding не работает, и я не уверен, почему это могло быть.

Однако есть обходной путь, который можно инкапсулировать в стиль: заменить стандартный Window ControlTemplate на свой собственный шаблон, который учитывает Padding:

<ControlTemplate TargetType="Window">
  <Border Background="White" Padding="{TemplateBinding Padding}">
    <ContentPresenter />
  </Border>
</ControlTemplate>

(Вы, вероятно, захотите, чтобы Border Background был кистью фона динамического окна для производственного кода, но вы поняли идею.)

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

Вот полный шаблон (сгенерированный с помощью Microsoft Expression):

<Style x:Key="WindowStyle" TargetType="{x:Type Window}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Window}">
                <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    Margin="{TemplateBinding Margin}"
                    Padding="{TemplateBinding Padding}">

                    <AdornerDecorator>
                        <ContentPresenter/>
                    </AdornerDecorator>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Window}">
                        <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">

                            <Grid>
                                <AdornerDecorator>
                                    <ContentPresenter/>
                                </AdornerDecorator>
                                <ResizeGrip
                                    x:Name="WindowResizeGrip"
                                    HorizontalAlignment="Right"
                                    VerticalAlignment="Bottom"
                                    IsTabStop="false"
                                    Visibility="Collapsed"
                                />
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition
                                        Property="ResizeMode"
                                        Value="CanResizeWithGrip"
                                    />
                                    <Condition 
                                        Property="WindowState"
                                        Value="Normal"
                                    />
                                </MultiTrigger.Conditions>
                                <Setter 
                                    Property="Visibility"
                                    TargetName="WindowResizeGrip"
                                    Value="Visible"/>
                            </MultiTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>
9
ответ дан 30 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: