在UniformGrid在WPF细胞中心复选框(Center checkbox in Uniform

2019-09-18 01:47发布

我想中心和拉伸在的细胞 。
我试图做到这一点在许多方面:

<UniformGrid>
        <CheckBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                  HorizontalContentAlignment="Center" VerticalContentAlignment="Center" />
        <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" />
        <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" ClipToBounds="True" />
        <CheckBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ClipToBounds="True" />

  • 选择的小区

    UniformGrid http://oi48.tinypic.com/ncayy0.jpg
  • 选择的小区

    UniformGrid http://oi49.tinypic.com/20hwo47.jpg

但它并不能满足我,因为我想伸展 (就像在单元格和中锋 (就像在在他们的小区同时这些复选框。

我该怎么做?


[编辑1]

我试图让这个我不必点击小检查,而是可以按整个小区。

[编辑2]

其实我要添加从C#代码的复选框,因此,如果在XAML提出的解决方案是不是“移植”到这将是不是非常有帮助的C#语言。

Answer 1:

如果我用默认值弹力这个简单的标记:

<UniformGrid>
    <CheckBox Content="This is a checkbox" />
    <CheckBox Content="This is a checkbox" />
    <CheckBox Content="This is a checkbox" />
    <CheckBox Content="This is a checkbox" />
</UniformGrid>

我能够在UniformGrid的每个单元的任意位置单击以选中或取消选中该单元格中的复选框。

这个功能是做你想要什么。 如果你想改变复选框的外观,你可以使用一个控件模板。

如果你不想改变CheckBox的大小和你只是想在视觉中心,它同时能够单击该单元格,以检查它,你可以使用这样的模板:

<CheckBox>
    <CheckBox.Template>
        <ControlTemplate TargetType="{x:Type CheckBox}">
            <Grid Background="Transparent">
                <CheckBox IsChecked="{TemplateBinding Property=IsChecked}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Grid>
        </ControlTemplate>
    </CheckBox.Template>
</CheckBox>

编辑:

将其应用在运行时的资源,在适当范围内的资源部分写的XAML。 你可以将其放置在本地资源字典,如果你只需要它一个控制,或者如果你想在全球访问它,把它的App.xaml中像这样:

<Application.Resources>
    <ControlTemplate x:Key="StretchedCheckBox" TargetType="{x:Type CheckBox}">
        <Grid Background="Transparent">
            <CheckBox IsChecked="{TemplateBinding Property=IsChecked}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
    </ControlTemplate>
</Application.Resources>

注意它有一个关键的“StretchedCheckBox”。 现在,您可以使用代码中应用它:

ControlTemplate stretchedTemplate = FindResource("StretchedCheckBox") as ControlTemplate;

CheckBox chkBox = new CheckBox();
chkBox.Template = stretchedTemplate;


Answer 2:

我不认为你可以影响的大小CheckBox一样,由于尺寸是在控制模板预先确定

一个解决办法是使用LayoutTransform缩放复选框以更大

<CheckBox>
    <CheckBox.LayoutTransform>
        <ScaleTransform ScaleX="5" ScaleY="5" />
    </CheckBox.LayoutTransform>
</CheckBox>

应当指出的是,这种秤旁边的复选框文本以及将CheckBox本身,有时取决于你如何扩展它没有看起来非常漂亮。

另一种替代的解决方案是复制从MSDN例如复选框模板 ,并产生更大的CheckBox



文章来源: Center checkbox in UniformGrid's cells in WPF