Wpf 更改复选框的大小及其复选标记

Wpf 更改复选框的大小及其复选标记,wpf,templates,checkbox,Wpf,Templates,Checkbox,我的应用程序将在带有触摸屏的电脑上运行,由警察在开车时操作。我把所有的图形元素都放大了,这样他们就可以被像我一样拥有香肠手指的人操作了 我有一个复选框,需要显示在屏幕上。我需要缩放复选框的大小,并将复选标记放大。我尝试在Expression Blend中编辑复选框的模板,方法是右键单击并选择Edit template | Edit a Copy。我设置了副本,使其适用于所有复选框 我可以通过模板将框的高度和宽度属性绑定到控件的实际高度,使框变大。但是,复选标记并没有因此而增长,而是位于左上角。至

我的应用程序将在带有触摸屏的电脑上运行,由警察在开车时操作。我把所有的图形元素都放大了,这样他们就可以被像我一样拥有香肠手指的人操作了

我有一个
复选框
,需要显示在屏幕上。我需要缩放复选框的大小,并将复选标记放大。我尝试在Expression Blend中编辑复选框的模板,方法是右键单击并选择Edit template | Edit a Copy。我设置了副本,使其适用于所有复选框

我可以通过模板将框的高度和宽度属性绑定到控件的
实际高度
,使框变大。但是,复选标记并没有因此而增长,而是位于左上角。至少可以说,这看起来不对

编辑模板时,我得到的Xaml如下:

<Style TargetType="{x:Type CheckBox}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="Background" Value="{StaticResource CheckBoxFillNormal}"/>
    <Setter Property="BorderBrush" Value="{StaticResource CheckBoxStroke}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="FocusVisualStyle" Value="{StaticResource EmptyCheckBoxFocusVisual}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <BulletDecorator Background="Transparent" SnapsToDevicePixels="true">
                    <BulletDecorator.Bullet>
                        <Microsoft_Windows_Themes:BulletChrome BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" IsChecked="{TemplateBinding IsChecked}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="{TemplateBinding ActualHeight}" Height="{TemplateBinding ActualHeight}"/>
                    </BulletDecorator.Bullet>
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </BulletDecorator>
                <ControlTemplate.Triggers>
                    <Trigger Property="HasContent" Value="true">
                        <Setter Property="FocusVisualStyle" Value="{StaticResource CheckRadioFocusVisual}"/>
                        <Setter Property="Padding" Value="4,0,0,0"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Expression Blend不允许我编辑
BulletChrome的
模板。“编辑当前”和“编辑副本”选项被禁用

我如何完成我想做的事情


Tony

您要查找的是路径,它实际上是复选标记,需要对其进行编辑。如果您查看了WPF中有关自定义复选框工作的部分,它将向您展示如何非常简单地完成它。如果你想再举一个例子,我可以在今天晚些时候下班后很快把它踢出去。干杯

可以找到默认的XAML,即
BulletDecorator的虚构示例。该页面上几乎整个XAML都处理
BulletDecorator
的外观和行为

所有XAML的核心是两个
Path
对象。第一个用于复选标记,第二个用于不确定标记(尽管名称“InderminateMark”在示例XAML中拼写错误。幸运的是,在复选框示例中,它的拼写始终错误,因此没有问题

            <Path Visibility="Collapsed"
                  Width="7"
                  Height="7"
                  x:Name="CheckMark"
                  SnapsToDevicePixels="False"
                  StrokeThickness="2"
                  Data="M 0 0 L 7 7 M 0 7 L 7 0">
              <Path.Stroke>
                <SolidColorBrush Color="{DynamicResource GlyphColor}" />
              </Path.Stroke>
            </Path>
            <Path Visibility="Collapsed"
                  Width="7"
                  Height="7"
                  x:Name="InderminateMark"
                  SnapsToDevicePixels="False"
                  StrokeThickness="2"
                  Data="M 0 7 L 7 0">
              <Path.Stroke>
                <SolidColorBrush Color="{DynamicResource GlyphColor}" />
              </Path.Stroke>
            </Path>


正如H.B.在评论中指出的那样,默认的WPF主题可以找到

不完美,但它可以工作。您可以设置文本块的样式(例如FontSize、Height…),复选标记会随着文本块的增加而增加

<StackPanel Name="CheckBoxPanel" Orientation="Horizontal">
    <Viewbox Height="{Binding Path=ActualHeight, ElementName=CheckBoxPanel}">
        <CheckBox />
    </Viewbox>
    <TextBlock /> <!-- for CheckBox Content -->
</StackPanel>

如果更改大小,则还必须更改路径,路径将固定为大小。如果已经有路径并且只想缩放它,则可以按比例增加所有数值

我最近需要将MSDN的示例自定义复选框[x]样式更改为勾号(),这里的路径是前后

<Path Visibility="Collapsed"
    Width="7"
    Height="7"
    x:Name="CheckMark"
    SnapsToDevicePixels="False"
    StrokeThickness="2"
    Data="M 0 0 L 7 7 M 0 7 L 7 0">
    <Path.Stroke>
        <SolidColorBrush Color="{DynamicResource GlyphColor}" />
    </Path.Stroke>
</Path>



这两个示例都有一条带有两条线的路径,这两条线的起点和终点位置都使用XY坐标。请注意,在第一张图像中,数字范围为0到7,大小为7x7。另外请注意,在第二张图像(勾号)中,我将大小增加到了9x9

我所做的就是调整每条线的起始和结束矢量2位置的数字,以得到记号形状


手动编辑的替代方法是下载免费版本的“Microsoft Expression Design 4”。然后,您可以按所需大小制作新图像,然后使用导出功能并选择XAML文件格式,然后检查生成的文件并从中获取路径。

MSDN上的这些页面不提供默认模板,但提供了生成的示例英译汉@H.B.谢谢,我不知道这些示例不是默认示例。这可以解释我与他们之间的一些不一致之处。在与我的老板讨论之后,我将进一步进行定制。他希望复选框看起来更像单选按钮,而不是圆形。他想要一个填充的边框颜色深沉,大小适中,易于查看。事实上,在驾驶过程中,复选标记很容易漏掉。使其突出很重要。使用查看框比批准的答案要好得多。
<Path Visibility="Collapsed"
    Width="9"
    Height="9"
    x:Name="CheckMark"
    SnapsToDevicePixels="False"
    StrokeThickness="2"
    Data="M 1 4.5 L 4 7.5 M 4 7.5 L 8 1">
    <Path.Stroke>
        <SolidColorBrush Color="{DynamicResource GlyphColor}" />
    </Path.Stroke>
</Path>