C# WPF:按钮不会更改其网格。列
我想创建一个右键左键菜单。在菜单的中央,我想要一个菜单项。到目前为止,除了我想放在GridColumn 2中的按钮_forward外,其他一切都正常。无论我尝试什么,按钮都保持在GridColumn 0中。我可以显示GridColumn 2中的所有内容,除了那个按钮C# WPF:按钮不会更改其网格。列,c#,wpf,xaml,menu,grid,C#,Wpf,Xaml,Menu,Grid,我想创建一个右键左键菜单。在菜单的中央,我想要一个菜单项。到目前为止,除了我想放在GridColumn 2中的按钮_forward外,其他一切都正常。无论我尝试什么,按钮都保持在GridColumn 0中。我可以显示GridColumn 2中的所有内容,除了那个按钮 <Menu DockPanel.Dock="Bottom" Height="30" Background="Gainsboro" HorizontalAlignment="Stretch"> <Menu.I
<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>
这就是它应该看起来的样子
<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>
+------------------------------------+|按钮|菜单项|按钮|
+------------------------------------+
<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>
如果我将按钮放在菜单项中,它将正确显示在第2列中
<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>
<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>
如何在第二列中显示按钮
<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>
谢谢 这是可以理解的
<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>
菜单
控件的工作方式是,如果您不提供菜单项
并直接提供类似于按钮
的内容,它将在内部将该按钮
包装在菜单项
中(因此,就菜单的项span
而言,按钮上的Grid.Column
规范就变得无用了)
<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>
您可以使用以下选项检查此行为:
<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>
<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>
正如您所看到的,按钮
被包装在一个菜单项
中,并且由于它没有指定网格.Column
,因此默认情况下它被放置在第0列,从而为您提供问题
<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>
解决方案:
<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>
正如您所猜测的,将您的按钮
包装在菜单项
中(这样在定义中为它提供了适当的列,系统以后不会更改)
<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>
或
<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>
设置菜单项的样式,使其看起来像您的按钮,并直接使用它
<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>
或
<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>
使用不同的布局控件,如StackPanel
或在我的c#code中不施加此要求的排序,我只启用按钮
<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>