WPF中UniformGrid单元格中的中心复选框

时间:2012-06-13 15:13:11

标签: wpf checkbox centering stretching

我想在 UniformGrid 的单元格中居中并拉伸复选框
我尝试过很多方面:

<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" />

但它不满足我,因为我想拉伸(就像在单元格(0,0)中)和中心(就像在(1,0)中那些同时在他们的单元格中的复选框。

我该怎么做?


[编辑1]

我正在尝试制作它,以便我不必点击小支票,而是可以点击整个单元格。

[编辑2]

实际上我想在C#代码中添加这些复选框,这样如果在XAML中制作的解决方案不能“移植”到C#语言,那么它将没有多大帮助。

2 个答案:

答案 0 :(得分:5)

如果我将这个简单的标记与默认的拉伸值一起使用:

<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的每个单元格中的任意位置来检查并取消选中该单元格中的复选框。

从功能上讲,这就是你想要的。如果要更改复选框的外观,可以使用ControlTemplate。

如果您不想更改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;

答案 1 :(得分:1)

我认为你不能影响CheckBox的大小,因为大小是在控制模板中预先确定的

一种解决方案是使用LayoutTransform将CheckBox缩放为更大

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

应该注意的是,这会缩放CheckBox旁边的文本以及CheckBox本身,有时看起来不太好,具体取决于你如何缩放它。

另一种替代解决方案是复制example CheckBox template from MSDN,并创建更大的CheckBox