如何在WPAM中以XAML格式(可视化树)获取现有控件的controltemplate?这有助于在现有模板的帮助下创建新的controltemplate.
我正在使用这样的复选框控件:
<CheckBox VerticalAlignment="Bottom" IsChecked="{Binding Selected}"
Grid.Column="0"
FontSize="{StaticResource PhoneFontSizeLarge}"
Content="{Binding Name}">
</CheckBox>
Run Code Online (Sandbox Code Playgroud)
问题是我将尺寸改变得更大一些.在这种情况下,文本变得越来越大,但是tick本身保持不变.它看起来很难看,我可以以某种方式调整复选框吗?
更新 我在Windows手机上这样做,所以LayoutTransform在这里不合适
使用:
我已经实现了这个答案,创建了我自己的CheckBox类,完成了一个IsChecked DependencyProperty.该属性由IsCheckedWPF上的属性支持CheckBox,或者如果它可以工作.工作意味着在切换复选框时会调用我的getter和setter.
如果我将我的属性重命名为IsChecked_temp并修改XAML以匹配,它可以正常工作.我认为这是一个命名冲突,但为什么不ElementName解决呢?我的最小测试用例如下.
编辑0:我忘了提,我没有错误或警告.
编辑1:这个答案最初被接受,因为它适用于测试用例,但它显然不是完整的答案.将它应用于我的项目(并将CheckBox类重命名为ToggleBox)会XamlParseException在每次使用属性时产生:
无法在"ToggleBox"类型的"IsChecked"属性上设置"绑定".'绑定'只能在DependencyObject的DependencyProperty上设置.
我会试着让一个最小的测试用例来展示这个.
CheckBox.xaml
<UserControl x:Class="CheckBox_test.CheckBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Self">
<StackPanel>
<CheckBox IsChecked="{Binding IsChecked, ElementName=Self}" />
</StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
CheckBox.xaml.cs
using System.Windows;
using System.Windows.Controls;
namespace CheckBox_test
{
public partial class CheckBox : UserControl
{
public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register(
"IsChecked",
typeof(bool),
typeof(CheckBox),
new FrameworkPropertyMetadata(false,
FrameworkPropertyMetadataOptions.AffectsRender));
public …Run Code Online (Sandbox Code Playgroud)