【问题标题】:Setting RenderTransform in a nested style以嵌套样式设置 RenderTransform
【发布时间】:2015-02-22 02:56:01
【问题描述】:

我在 Windows 8 上使用 .Net 3.5,默认 Aero 主题。

这应该是对Scale Checkbox without scaling content 的回答,但它并没有我预期的那么容易。我正在尝试:

  1. 在复选框控件中缩放框
  2. 风格,所以我可以将更改应用于所有复选框(或仅部分)
  3. 独立于其文本,无需补偿。

我有一个 UserControl 与此资源:

<UserControl.Resources>
    <ResourceDictionary>
        <!-- ... -->

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../Resources/CheckBoxStyle.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

Resources/CheckBoxStyle.xaml是这样的:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework">
    <Style TargetType="{x:Type CheckBox}">
        <Style.Resources>
            <Style TargetType="{x:Type BulletDecorator}">
                <Setter Property="RenderTransform">
                    <Setter.Value>
                        <ScaleTransform ScaleX="2" ScaleY="2"/>
                    </Setter.Value>
                </Setter>
            </Style>
        </Style.Resources>
    </Style>
</ResourceDictionary>

primitives 命名空间是为了以防万一我决定需要知道 BulletDecorator 是什么。

我在here 的 .Net 3.5 的 Aero 主题中找到了 BulletDecorator,位于“默认 WPF 主题”链接后面,每个 this answer

我发现复选框的大小没有变化。我不认为我从主题中抓取了错误的元素类型,但还会发生什么?

编辑 1:

BulletDecorator 无论如何都包含复选框的内容,所以我尝试删除要求 #3。现在我有一个巨大的盒子和巨大的文字,想把文字缩小回来。这是 CheckBoxStyle.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework">
    <Style TargetType="{x:Type CheckBox}">
        <Style.Resources>
            <Style TargetType="{x:Type ContentControl}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ContentControl}">
                            <ContentPresenter>
                                <ContentPresenter.LayoutTransform>
                                    <ScaleTransform ScaleX="0.5" ScaleY="0.5" />
                                </ContentPresenter.LayoutTransform>
                            </ContentPresenter>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Style.Resources>
        <Setter Property="LayoutTransform">
            <Setter.Value>
                <ScaleTransform ScaleX="2" ScaleY="2"/>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

【问题讨论】:

    标签: wpf xaml .net-3.5 styling


    【解决方案1】:

    我找到了一个解决方案,虽然它并不完美。仍然会接受更好的答案。

    我使用Snoop 确定我关注的元素已经是ContentPresenter。它包含一个 TextBlock,但由于某种原因无法设置样式(它显示在 Snoop 层次结构的括号中)。这是我生成的 CheckBoxStyle.xaml

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework">
        <Style TargetType="{x:Type CheckBox}">
            <Style.Resources>
                <Style TargetType="{x:Type ContentPresenter}">
                    <Setter Property="LayoutTransform">
                        <Setter.Value>
                            <ScaleTransform ScaleX="0.5" ScaleY="0.5" />
                        </Setter.Value>
                    </Setter>
                </Style>
            </Style.Resources>
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <ScaleTransform ScaleX="2" ScaleY="2"/>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 2010-10-14
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 2014-05-08
      • 2020-06-28
      相关资源
      最近更新 更多