How to add a StackPanel in a Button in C# code behind

痞子三分冷 提交于 2020-01-10 04:45:06

问题


How to add a StackPanel in a Button using c# code behind (i.e. convert the following XAML to C# )? There is no Button.Children.Add...

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

回答1:


Set Button.Content instead of using Button.Children.Add

As a longer explanation:

  • Button is a control which "only has 1 child" - its Content.
  • Only very few controls (generally "Panels") can contain a list of zero or more Children - e.g. StackPanel, Grid, WrapPanel, Canvas, etc.

As your code already shows, you can set the Content of a Button to be a Panel - this would ehn allow you to then add multiple child controls. However, really in your example, then there is no need to have the StackPanel as well as the Image. It seems like your StackPanel is only adding Padding - and you could add the Padding to the Image rather than to the StackPanel if you wanted to.




回答2:


  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;



回答3:


In Xaml :

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

In C# :

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

I advise you to put the image in xaml resources :

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

And call it like this :

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



回答4:


Use like this

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

and in Codebehind

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;


来源:https://stackoverflow.com/questions/5390270/how-to-add-a-stackpanel-in-a-button-in-c-sharp-code-behind

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!