我想创建一个菜单,右侧有一个按钮,左侧有一个按钮。在菜单的中心,我想要一个MenuItem。到目前为止,除了要放在GridColumn 2中的Button_forward之外,一切都有效。无论我尝试什么,Button都保留在GridColumn 0中。我可以在GridColumn 2中显示除Button之外的所有内容。
这应该看起来像是
+ ------------------------------------ +
|按钮| MenuItem |按钮|
+ ------------------------------------ +
<Menu DockPanel.Dock="Bottom" Height="30" Background="Gainsboro" HorizontalAlignment="Stretch">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<Grid ShowGridLines="True" x:Name="Grid1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<Button Height="20" Width="40" Grid.Column="0" x:Name="Button_backward" Click="Button_backward_Click" IsEnabled="False">
<Image Source="..\Resources\leftarrow.png"/>
</Button>
<MenuItem Grid.Column="1" Height="20" >
<TextBox Text="Test"></TextBox>
</MenuItem>
<Button Grid.Column="2" Height="20" Width="40" x:Name="Button_forward" Click="Button_forward_Click" IsEnabled="False">
<Image Source="..\Resources\rightarrow.png"/>
</Button>
</Menu>
如果我将Button放在MenuItem中,它会在第2列中正确显示
<MenuItem Grid.Column="2">
<Button Height="20" Width="40" x:Name="Button_forward" Click="Button_forward_Click" IsEnabled="False">
<Image Source="..\Resources\rightarrow.png"/>
</Button>
</MenuItem>
如何在第二列中显示按钮?
谢谢!
答案 0 :(得分:2)
这是可以理解的,
Menu
控件的工作方式是,如果您不提供MenuItem
并直接提供类似Button
的内容,则会将Button
包裹在MenuItem
中1}}内部(因此,Grid.Column
对Button
的{{1}}规范就菜单的ItemsPanel
而言毫无用处。“
您可以使用Snoop检查此行为,例如:
正如您所看到的,Button
包含在MenuItem
中,并且由于它没有指定Grid.Column
,因此默认情况下会将其置于第0列,从而为您提供问题。
<强>解决方案:强>
正如您所猜测的那样,将Button
包裹在MenuItem
中(从而在定义中给出相应的列,系统稍后不会更改)
或
将MenuItem
设置为与Button
类似,并直接使用它。
或强>
使用不同的布局控件,例如StackPanel
或不强加此要求的排序