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

pat*_*eza 0 wpf checkbox stretching centering

我想在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" />
Run Code Online (Sandbox Code Playgroud)

但它并不能让我满意,因为我想同时伸展(就像在单元格(0,0)中)和中心(就像在(1,0)中)那些复选框.

我该怎么做?


[编辑1]

我正在尝试这样做,以便我不必点击小支票,而是可以点击整个单元格.

[编辑2]

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

Tre*_*ott 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>
Run Code Online (Sandbox Code Playgroud)

我可以单击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>
Run Code Online (Sandbox Code Playgroud)

编辑:

要在运行时将其作为资源应用,请将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>
Run Code Online (Sandbox Code Playgroud)

注意它有一个键"StretchedCheckBox".现在您可以使用它在代码中应用它:

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

CheckBox chkBox = new CheckBox();
chkBox.Template = stretchedTemplate;
Run Code Online (Sandbox Code Playgroud)

  • 您将必须x:Null内部复选框的样式,否则最终将导致堆栈溢出。 (2认同)