我有一个带有HierachicalDatatemplates的WPF Treeview用于节点。 子节点包含用于选择子节点的复选框。 到目前为止一切都很好。
子节点的内容应该是一个带有多行内容的复选框,几个文本框,并根据视图模型一些图片。
当我将内容放在复选框内时,该框始终显示在内容的垂直中心。 但我希望复选框位于内容的左上角。
以下是WPF代码示例:
<Window x:Class="Spielwiese.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!--THIS IS WHAT I LIKE TO USE-->
<CheckBox Grid.Column="0" Margin="5">
<StackPanel>
<TextBlock Text="Some text" />
<TextBlock Text="Some more text" />
<TextBlock Text="a lot of more text" />
</StackPanel>
</CheckBox>
<!--THIS IS MY ACTUAL WORKAROUND-->
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" Margin="0,3,5,0" />
<StackPanel Grid.Column="1">
<TextBlock Text="Some text" />
<TextBlock Text="Some more text" />
<TextBlock Text="a lot of more text" />
</StackPanel>
</Grid>
</Grid>
由于选择了节点,我希望内容位于checkbock中。 我已经尝试为checkbock设置verticalcontentalignment但它没有改变任何内容。
编辑: 填充是一种解决方案,但不幸的是,无论哪个内容,复选框的位置应始终位于左上角。内容的行可能会有所不同......
也许索蒙已经解决了这个小问题。
答案 0 :(得分:2)
我希望内容在checkbo [x]中,因为 选择节点。
复选框控件使用ContentPresenter
,其中(带复选框)主要用于处理基本文本方案。
因为选择了节点。
这是提供答案变得棘手的地方,因为现在要求必须在树视图的上下文(可以这么说)中工作。只有你能说出这些要求......但是......
我认为你有这些选择:
Checkbox
样式,并取出包含其中包含所需内容的内容展示器。 (我在下面的例子中这样做了。)没有快速的方法可以做到这一点......但是可以使用自定义控件(我的主要建议)或模板更改。
原始ContentPresenter已被删除并替换为网格以保存复选框和文本。以下样式创建了这个:
<Style x:Key="OmegaCheckBoxStyle" TargetType="{x:Type CheckBox}">
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Background" Value="{StaticResource CheckBoxFillNormal}"/>
<Setter Property="BorderBrush" Value="{StaticResource CheckBoxStroke}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource EmptyCheckBoxFocusVisual}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<BulletDecorator Background="Transparent"
SnapsToDevicePixels="true"
VerticalAlignment="Bottom">
<BulletDecorator.Bullet>
<Themes:BulletChrome BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}"
IsChecked="{TemplateBinding IsChecked}"
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderPressed="{TemplateBinding IsPressed}"
/>
</BulletDecorator.Bullet>
</BulletDecorator>
<TextBlock Text="Some text" Grid.Row="0" Grid.Column="2"/>
<TextBlock Text="Some more text" Grid.Row="1" Grid.Column="2"/>
<TextBlock Text="a lot of more text" Grid.Row="2" Grid.Column="2"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasContent" Value="true">
<Setter Property="FocusVisualStyle"
Value="{StaticResource CheckRadioFocusVisual}"/>
<Setter Property="Padding" Value="4,0,0,0"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground"
Value="{DynamicResource {x:Static
SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>