Подтвердить что ты не робот

Как добавить StackPanel в кнопку в коде С#

Как добавить StackPanel в кнопку с использованием кода С# (т.е. преобразовать следующие XAML в С#)? Нет Button.Children.Add...

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

Ответ 1

Установите Button.Content вместо Button.Children.Add

В качестве более подробного объяснения:

  • Кнопка - это элемент управления, у которого "только 1 ребенок" - его Content.
  • Только очень немногие элементы управления (обычно "Панели" ) могут содержать список из нуля или более Children - например. StackPanel, Grid, WrapPanel, Canvas и т.д.

Как уже показывает ваш код, вы можете установить Content кнопки в качестве панели - это позволит вам добавить несколько дочерних элементов управления. Однако, действительно, в вашем примере, нет необходимости иметь StackPanel, а также Image. Кажется, что ваш StackPanel добавляет только Padding, и вы можете добавить Padding к изображению, а не к StackPanel, если хотите.

Ответ 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

Используйте это как

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

и в 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;

Ответ 4

В Xaml:

<Button x:Name="BtnSuppBordereau" Click="BtnSuppBordereau_Click" BorderBrush="White" Background="White" >
  <DockPanel>
     <Image Source="foo.png" Height="16" Width="16"/>
  </DockPanel>
</Button>

В С#:

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")
};