C# WPF:按钮不会更改其网格。列

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

我想创建一个右键左键菜单。在菜单的中央,我想要一个菜单项。到目前为止,除了我想放在GridColumn 2中的按钮_forward外,其他一切都正常。无论我尝试什么,按钮都保持在GridColumn 0中。我可以显示GridColumn 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>
这就是它应该看起来的样子

<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>