【问题标题】:Different Margin property value of ContentPresenter depending on theme (XAML)ContentPresenter 的不同 Margin 属性值取决于主题 (XAML)
【发布时间】:2014-10-18 22:18:32
【问题描述】:

我不知道如何在XAML 中为ContentPresenterMargin 属性设置固定值。

我正在使用 Telerik WPF 库来切换 UI 主题。到目前为止一切看起来都很好,但是当我 切换到主题(Visual Studio 2013 主题),按钮的内容变得太小。

当我使用Snoop 工具调查时,主题在内部将ContentPresenter 的Margin 属性更改为大值,结果内容大小变小。

有没有办法将ContentPresenterMargin 属性值修复为我自己的(例如,将值修复为3)而不在我的代码中使用ControlTemplate 块? (如...ContentPresenter.Margin...的样式设置器)

以下代码实际上是我想要的,虽然我不应该在我的代码中使用ControlTemplate 块...

<Button Width="100" Height="100">
    <Button.Content>
        <Grid Background="Green">
            <Rectangle>
                <Rectangle.Fill>
                    <DrawingBrush Stretch="Uniform">
                        <DrawingBrush.Drawing>
                            <GeometryDrawing Geometry="M0,260 L0,600 L110,670 L110,500 L190,550 L190,710 L300,775 L300,430 L150,175">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="50" LineJoin="Round" Brush="Red"/>
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                        </DrawingBrush.Drawing>
                    </DrawingBrush>
                </Rectangle.Fill>
            </Rectangle>
        </Grid>
    </Button.Content>
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Border BorderBrush="Black" BorderThickness="1">
                <ContentPresenter Margin="3"/>
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>

【问题讨论】:

  • 您是否尝试为ContentPresenter 设置默认样式?

标签: wpf xaml


【解决方案1】:

您应该能够通过指定TargetType 来设置隐式样式,但不能指定x:Key

例如,以下应使Window 内的任何ContentPresenter 中的Margin 属性等于3,除非另一个属性设置器具有更高的DependencyPropertyPrecedence

<Window.Resources>
    <Style TargetType="{x:Type ContentPresenter}">
        <Setter Property="Margin" Value="3" />
    </Style>
</Window.Resources>

如果您要保留基本样式的某些方面,可以使用BasedOn 样式属性从基本样式继承所有其他属性

<Style TargetType="{x:Type ContentPresenter}" 
       BasedOn="{StaticResource {x:Type ContentPresenter}}">

<Style TargetType="{x:Type ContentPresenter}" 
       BasedOn="{StaticResource BaseStyleKey}">

【讨论】:

  • 嗨,瑞秋,感谢您的评论。真的很有帮助!但是......我可以告诉我为什么 Margin 在以下代码中不起作用吗? 光标已更改为手。很好,虽然 Margin 似乎没有改变......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2017-07-05
  • 2019-04-11
  • 2020-05-14
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多