0

我想在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)

    统一网格

但这并不让我满意,因为我想同时拉伸(就像在单元格(0,0)中一样)和居中(就像在(1,0)中一样)这些复选框在它们的单元格中。

我该怎么做?


[编辑 1]

我正在努力做到这一点,这样我就不必单击小检查,而是可以单击整个单元格。

[编辑 2]

实际上,我想从 C# 代码中添加这些复选框,所以如果用 XAML 制作的解决方案对于 C# 语言来说不是“可移植的”,那将不是很有帮助。

4

2 回答 2

5

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

<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;
于 2012-06-13T15:41:54.700 回答
1

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

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

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

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

另一种替代解决方案是从 MSDN 复制示例 CheckBox 模板,并创建一个更大的CheckBox

于 2012-06-13T15:44:17.837 回答