【发布时间】:2015-02-22 02:56:01
【问题描述】:
我在 Windows 8 上使用 .Net 3.5,默认 Aero 主题。
这应该是对Scale Checkbox without scaling content 的回答,但它并没有我预期的那么容易。我正在尝试:
- 在复选框控件中缩放框
- 风格,所以我可以将更改应用于所有复选框(或仅部分)
- 独立于其文本,无需补偿。
我有一个 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>
【问题讨论】: