网格在列定义之间留下额外的 space
Grid leaving extra space between column definitions
我有一个带有自定义模板的自定义按钮。在模板中,我使用网格定义对 Rectangle
、Canvas
和 Label
.
的内容进行排序
这是模板:
<ControlTemplate
TargetType="{x:Type l:UXButton}">
<Border
Name="TEMP_Container"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"
FlowDirection="{Binding Converter={StaticResource LocalizedFlowConverter}}">
<Grid
Name="TEMP_ContentContainer"
Background="Blue">
<Grid.ColumnDefinitions>
<ColumnDefinition
Name="ColumnIcon"
Width="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type Border}}}" />
<ColumnDefinition
Name="ColumnSpace"
Width="auto" />
<ColumnDefinition
Name="ColumnContent"
Width="auto" />
</Grid.ColumnDefinitions>
<Rectangle
Name="TEMP_Icon"
Grid.Column="0"
Margin="0"
Fill="{TemplateBinding Foreground}">
<Rectangle.OpacityMask>
<VisualBrush
Stretch="{Binding RelativeSource={RelativeSource AncestorType=l:UXButton}, Path=Stretch}"
Visual="{Binding RelativeSource={RelativeSource AncestorType=l:UXButton}, Path=IconSource}" />
</Rectangle.OpacityMask>
</Rectangle>
<Canvas
Name="TEMP_Space"
Grid.Column="1"
Margin="0"
Width="{TemplateBinding Spacing}" />
<Label
Name="TEMP_Content"
Grid.Column="2"
Margin="0"
Padding="0"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Foreground="{TemplateBinding Foreground}">
<TextBlock
Margin="0"
Padding="0"
Text="{TemplateBinding Content}"
TextDecorations="{TemplateBinding TextDecorations}" />
</Label>
</Grid>
</Border>
</ControlTemplate>
结果如下:
如您所见,网格在 Canvas
(红色)和 Rectangle
(绿色)之间留下了额外的 space(蓝色),我似乎无法理解为什么!我什至尝试对列宽使用静态值,但没有帮助。我还使用了 XAML debugging tools
并且它似乎是 Grid
.
的一部分
这个 space 来自哪里?
我认为 "fix" 您拥有但保留现有网格的简单方法是将其包装在另一个网格中。
这样它应该集中和缩小。
除非你有设置网格宽度的东西。
原来是个bug。清理 bin
和 obj
文件夹并简单地执行 Rebuild
修复它。一定是 Resource
卡在了中间的某个地方。
我有一个带有自定义模板的自定义按钮。在模板中,我使用网格定义对 Rectangle
、Canvas
和 Label
.
这是模板:
<ControlTemplate
TargetType="{x:Type l:UXButton}">
<Border
Name="TEMP_Container"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"
FlowDirection="{Binding Converter={StaticResource LocalizedFlowConverter}}">
<Grid
Name="TEMP_ContentContainer"
Background="Blue">
<Grid.ColumnDefinitions>
<ColumnDefinition
Name="ColumnIcon"
Width="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type Border}}}" />
<ColumnDefinition
Name="ColumnSpace"
Width="auto" />
<ColumnDefinition
Name="ColumnContent"
Width="auto" />
</Grid.ColumnDefinitions>
<Rectangle
Name="TEMP_Icon"
Grid.Column="0"
Margin="0"
Fill="{TemplateBinding Foreground}">
<Rectangle.OpacityMask>
<VisualBrush
Stretch="{Binding RelativeSource={RelativeSource AncestorType=l:UXButton}, Path=Stretch}"
Visual="{Binding RelativeSource={RelativeSource AncestorType=l:UXButton}, Path=IconSource}" />
</Rectangle.OpacityMask>
</Rectangle>
<Canvas
Name="TEMP_Space"
Grid.Column="1"
Margin="0"
Width="{TemplateBinding Spacing}" />
<Label
Name="TEMP_Content"
Grid.Column="2"
Margin="0"
Padding="0"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Foreground="{TemplateBinding Foreground}">
<TextBlock
Margin="0"
Padding="0"
Text="{TemplateBinding Content}"
TextDecorations="{TemplateBinding TextDecorations}" />
</Label>
</Grid>
</Border>
</ControlTemplate>
结果如下:
如您所见,网格在 Canvas
(红色)和 Rectangle
(绿色)之间留下了额外的 space(蓝色),我似乎无法理解为什么!我什至尝试对列宽使用静态值,但没有帮助。我还使用了 XAML debugging tools
并且它似乎是 Grid
.
这个 space 来自哪里?
我认为 "fix" 您拥有但保留现有网格的简单方法是将其包装在另一个网格中。
这样它应该集中和缩小。 除非你有设置网格宽度的东西。
原来是个bug。清理 bin
和 obj
文件夹并简单地执行 Rebuild
修复它。一定是 Resource
卡在了中间的某个地方。