【问题标题】:How to add a StackPanel in a Button in C# code behind如何在 C# 代码后面的按钮中添加 StackPanel
【发布时间】:2011-07-20 09:39:45
【问题描述】:

如何使用后面的 c# 代码在 Button 中添加 StackPanel(即将以下 XAML 转换为 C#)?没有Button.Children.Add...

<Button>
   <StackPanel Orientation="Horizontal" Margin="10">
      <Image Source="foo.png"/>
   </StackPanel>
</Button>

【问题讨论】:

    标签: c# wpf xaml button


    【解决方案1】:
      Image img = new Image();
      img.Source = new BitmapImage(new Uri("foo.png"));
    
      StackPanel stackPnl = new StackPanel();
      stackPnl.Orientation = Orientation.Horizontal;
      stackPnl.Margin = new Thickness(10);
      stackPnl.Children.Add(img);
    
      Button btn = new Button();
      btn.Content = stackPnl;
    

    【讨论】:

      【解决方案2】:

      设置Button.Content而不是使用Button.Children.Add

      作为更长的解释:

      • Button 是一个“只有 1 个孩子”的控件 - 它的 Content
      • 只有极少数控件(通常是“面板”)可以包含零个或多个 Children 的列表 - 例如StackPanel、Grid、WrapPanel、Canvas 等。

      正如您的代码已经显示的那样,您可以将按钮的Content 设置为面板 - 这将允许您随后添加多个子控件。但是,在您的示例中,实际上不需要 StackPanel 和 Image。似乎您的 StackPanel 只是添加了 Padding - 如果您愿意,您可以将 Padding 添加到 Image 而不是 StackPanel。

      【讨论】:

        【解决方案3】:

        这样使用

        <Window.Resources>   
            <ImageSource x:Key="LeftMenuBackgroundImage">index.jpg</ImageSource>
            <ImageBrush x:Key="LeftMenuBackgroundImageBrush" 
             ImageSource="{DynamicResource LeftMenuBackgroundImage}"/> 
        </Window.Resources>
        

        在代码隐藏中

        Button btn = new Button();
                btn.HorizontalContentAlignment = HorizontalAlignment.Stretch;
                btn.VerticalContentAlignment = VerticalAlignment.Stretch;
                StackPanel stk = new StackPanel();
                stk.Orientation = Orientation.Horizontal;
                stk.Margin = new Thickness(10, 10, 10, 10);
                stk.SetResourceReference(StackPanel.BackgroundProperty, "LeftMenuBackgroundImageBrush");
                btn.Content = stk;
        

        【讨论】:

          【解决方案4】:

          在 Xaml 中:

          <Button x:Name="Btn" Click="Btn_Click" Orientation="Horizontal" Margin="10">
            <StackPanel>
               <Image Source="foo.png" Height="16" Width="16"/>
            </StackPanel>
          </Button>
          

          在 C# 中:

          Button btn = new Button();
          StackPanel panel = new StackPanel();
          Image img = new Image
          {
             Source = "../foo.png"
          }
          panel.Children.Add(img);
          btn.Content = panel;
          

          我建议你把图片放在 xaml 资源中:

          <Window.Resources>
              <BitmapImage x:Key="Img" UriSource="/Img/foo.png"/>
          </Window.Resources>
          

          然后这样称呼它:

          Image img = new Image
          {
             Source = (BitmapImage)FindResource("Img")
          };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多