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#语言,那么它将没有多大帮助.
如果我使用这个简单的标记与默认的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)