Как добавить StackPanel в код кнопки в C # позади - PullRequest
13 голосов
/ 22 марта 2011

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

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

Ответы [ 4 ]

17 голосов
/ 22 марта 2011
  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;
14 голосов
/ 22 марта 2011

Установить Button.Content вместо использования Button.Children.Add

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

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

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

1 голос
/ 11 июля 2019

В Xaml:

<Button x:Name="Btn" Click="Btn_Click" Orientation="Horizontal" Margin="10">
  <DockPanel>
     <Image Source="foo.png" Height="16" Width="16"/>
  </DockPanel>
</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")
};
1 голос
/ 22 марта 2011

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

<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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...