wpf – Window.Margin&Window.Padding不工作
发布时间:2020-12-13 20:11:52 所属栏目:Windows 来源:网络整理
导读:我设置一个窗口的peroperty Margin和Padding,它不会生效: 这是一个例子: Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" SizeToContent="WidthAndHeight" ResizeMode
我设置一个窗口的peroperty Margin和Padding,它不会生效:
这是一个例子: <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> 结果: 所需的结果是,标签的红色框架应距离窗口框架(边距填充)44px. 是的,我知道我可以设置标签的边缘,但这不是我想要的. 我猜,如果我找不到任何解决方案,我将创建一个命名样式的贪心,我将设置边距/填充,然后我将通过窗口,并设置网格的风格,但这是我想做的最后一个选项.
这并不奇怪,保证金不起作用,因为保证金是要控制的空间.对于窗口,这意味着使框架更小(和偏移),而不是客户端区域,这将是一个有点奇怪(并且可能不会很好地与Win32托管环境,不确定).有一点令人惊讶的是,Padding不行,我不知道为什么会这样.
但是,有一种解决方法可以封装在一个样式中:将默认的Window ControlTemplate替换为遵循Padding的自己的模板: <ControlTemplate TargetType="Window"> <Border Background="White" Padding="{TemplateBinding Padding}"> <ContentPresenter /> </Border> </ControlTemplate> (您可能希望边框背景成为生产代码的动态窗口背景画笔,但您可以获得想法.) 很明显,你可以把这个模板放在一个样式模板设置器中,以避免在每个窗口重复它. 以下是完整的模板(使用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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- active-directory – kinit&pam_sss:获取初始凭据时找
- windows – 如何确定剪贴板数据大小?
- windows – 在我的应用程序退出之前终止的线程上调用CoUnin
- .net – AssemblyInfo属性如何映射到Win32 VERSIONINFO?
- windows-phone-7 – Live Connect API – 创建子文件夹
- microsoft-graph – Microsoft Graph API:403尝试在租户上
- windows – 为什么批处理文件中的延迟扩展在这种情况下不起
- windows – ncat SSL问题,证书验证失败(自签名证书)
- nuget – 如何打包一个面向通用Windows平台并依赖于Visual
- Windows Azure上与Jenkins slave的连接问题