我想在 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#语言,那么它将没有多大帮助。
答案 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