gpt4 book ai didi

c# - WPF。如何使分隔符拉伸(stretch)到菜单宽度?

转载 作者:行者123 更新时间:2023-12-02 00:17:42 25 4
gpt4 key购买 nike

这可能是一个愚蠢的问题......但我一直无法找到另一个问题来回答它,也找不到可以帮助我实现我想要的东西的帖子。

我有以下 XAML:

<Menu>
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="Item1" />
<Separator VerticalContentAlignment="Stretch" VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" />
<MenuItem Header="Item2" />
</Menu>

在我的真实业务案例中,标题更为复杂,包含图像和其他一些内容。

问题是上面的 xaml 产生了以下输出:

enter image description here

如您所见,分隔符没有拉伸(stretch)。这似乎是一项非常简单的任务...但我还没有找到解决方案。

我尝试的是将样式设置为 ItemContainerStyle,我将 Horizo​​ntalContentAlignment 的值设置为 Stretch,但它不起作用。

最佳答案

默认模板包含边距。您可以通过定义自己的自定义模板来删除它:

<Separator>
<Separator.Template>
<ControlTemplate TargetType="{x:Type Separator}">
<Border Background="{TemplateBinding Control.Background}"
BorderBrush="{TemplateBinding Control.BorderBrush}"
BorderThickness="{TemplateBinding Control.BorderThickness}" Margin="0"/>
</ControlTemplate>
</Separator.Template>
</Separator>

Windows 8 及更高版本上的默认值如下所示,即 Border 元素具有硬编码的 30 左边距 DIP:

<ControlTemplate TargetType="{x:Type Separator}">
<Border Background="{TemplateBinding Control.Background}"
BorderBrush="{TemplateBinding Control.BorderBrush}"
BorderThickness="{TemplateBinding Control.BorderThickness}" Margin="30,0,0,0"/>
</ControlTemplate>

如果您的 Menu 包含多个分隔符,您可以使用隐式 Style:

<Menu>
<Menu.Resources>
<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Separator}">
<Border Background="{TemplateBinding Control.Background}"
BorderBrush="{TemplateBinding Control.BorderBrush}"
BorderThickness="{TemplateBinding Control.BorderThickness}"
Margin="0"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Menu.Resources>
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Header="Item1" />
<Separator />
<MenuItem Header="Item2" />
<Separator />
</Menu>

关于c# - WPF。如何使分隔符拉伸(stretch)到菜单宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546871/

25 4 0