Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 事件处理程序&x2B;格式化多个按钮-WPF_C#_Wpf_Event Handling_Stackpanel - Fatal编程技术网

C# 事件处理程序&x2B;格式化多个按钮-WPF

C# 事件处理程序&x2B;格式化多个按钮-WPF,c#,wpf,event-handling,stackpanel,C#,Wpf,Event Handling,Stackpanel,实际上,我有两个问题要解决,并在我的wpf应用程序中结合在一起 我有多个具有特定布局的按钮 <Window.Resources> <Style x:Key="greenButton" TargetType="Button"> <Setter Property="Background" Value="LightGreen" /> <Setter Property="FontSize" Value="20"/>

实际上,我有两个问题要解决,并在我的wpf应用程序中结合在一起

我有多个具有特定布局的按钮

<Window.Resources>
    <Style x:Key="greenButton" TargetType="Button">
        <Setter Property="Background" Value="LightGreen" />
        <Setter Property="FontSize" Value="20"/>
        <Setter Property="BorderThickness" Value="1"/>
     </Style>
     ...        
</Window.Resources>   
嗯。但是我有这么多的按钮,所以我想用相同的点击事件处理程序将它们组合在一起。我试过这个:

<StackPanel Button.Click="button_Click" Grid.RowSpan="20">
     <Button Grid.Column="0" Grid.Row="0" FontWeight="Bold" BorderBrush="Black" Style="{StaticResource greenButton}">LT 1</Button>
     <Button x:Name="btn100" Grid.Column="0" Grid.Row="2" Style="{StaticResource greenButton}">100</Button>
     <Button x:Name="btn101" Grid.Column="0" Grid.Row="3" Style="{StaticResource greenButton}">101</Button>
     <Button x:Name="btn102" Grid.Column="0" Grid.Row="4" Style="{StaticResource greenButton}">102</Button>
 </StackPanel>
现在我有两个问题:

  • 行对齐对我的按钮不起作用。使用stackpanel,它们现在比我在网格中定义的行更大/更高
  • 我不知道按钮的名字。它总是空的
  • 请提前向Thx寻求帮助

    编辑:
    我的解决方案没有基于这篇文章的副本,但是当您分配
    按钮时,我在进一步(布局+传输变量)

    时遇到问题。单击
    处理程序到StackPanel,处理程序方法的sender参数不是按钮,因此
    (sender as Button)
    返回null

    您可以编写
    (例如,OriginalSource as Button)
    ,因为在您的样式中,通过
    事件设置器将单击处理程序分配给所有按钮可能更简单:

    <Style x:Key="greenButton" TargetType="Button">
        ...
        <EventSetter Event="Click" Handler="button_Click"/>
    </Style>
    
    
    ...
    
    当您分配
    按钮时。单击StackPanel中的
    处理程序,处理程序方法的sender参数不是按钮,因此
    (sender as Button)
    返回null

    您可以编写
    (例如,OriginalSource as Button)
    ,因为在您的样式中,通过
    事件设置器将单击处理程序分配给所有按钮可能更简单:

    <Style x:Key="greenButton" TargetType="Button">
        ...
        <EventSetter Event="Click" Handler="button_Click"/>
    </Style>
    
    
    ...
    
    我认为,在这种情况下,发送方是StackPanel。尝试使用:

    string name = (e.OriginalSource as Button)?.Content.ToString();
    

    我认为,发送方在本例中是StackPanel。尝试使用:

    string name = (e.OriginalSource as Button)?.Content.ToString();
    

    无重复的可能重复。我的解决方案是基于这篇文章的,但我在进一步(布局+传输变量)时遇到了问题。请注意,当然没有必要引入StackPanel(这显然会破坏您的布局)。您也可以指定
    按钮。单击网格上的
    。可能重复但不重复。我的解决方案是基于这篇文章的,但我在进一步(布局+传输变量)时遇到了问题。请注意,当然没有必要引入StackPanel(这显然会破坏您的布局)。您也可以指定
    按钮。单击网格上的
    。我移除了stackpanel并实现了您的建议,现在。。。它的工作:)Thx洛蒂删除了stackpanel和实施您的建议,现在。。。它的工作:)Thx很多
    
    string name = (e.OriginalSource as Button)?.Content.ToString();