我设置一个窗口的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>