wpf – Window.Margin&Window.Padding不工作

前端之家收集整理的这篇文章主要介绍了wpf – Window.Margin&Window.Padding不工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我设置一个窗口的peroperty Margin和Padding,它不会生效:

这是一个例子:@H_404_2@

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

结果:@H_404_2@

所需的结果是,标签的红色框架应距离窗口框架(边距填充)44px.@H_404_2@

是的,我知道我可以设置标签的边缘,但这不是我想要的.
我有一个整个项目,所有的窗口都设置为一个样式,我想设置这个属性(或其他)在一般的窗口样式.@H_404_2@

我猜,如果我找不到任何解决方案,我将创建一个命名样式的贪心,我将设置边距/填充,然后我将通过窗口,并设置网格的风格,但这是我想做的最后一个选项.
提前致谢.@H_404_2@

这并不奇怪,保证金不起作用,因为保证金是要控制的空间.对于窗口,这意味着使框架更小(和偏移),而不是客户端区域,这将是一个有点奇怪(并且可能不会很好地与Win32托管环境,不确定).有一点令人惊讶的是,Padding不行,我不知道为什么会这样.

但是,有一种解决方法可以封装在一个样式中:将默认的Window ControlTemplate替换为遵循Padding的自己的模板:@H_404_2@

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

(您可能希望边框背景成为生产代码的动态窗口背景画笔,但您可以获得想法.)@H_404_2@

很明显,你可以把这个模板放在一个样式模板设置器中,以避免在每个窗口重复它.@H_404_2@

以下是完整的模板(使用Microsoft Expression生成):@H_404_2@

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

猜你在找的Windows相关文章