Как добавить StackPanel в кнопку в коде С#
Как добавить StackPanel в кнопку с использованием кода С# (т.е. преобразовать следующие XAML в С#)? Нет Button.Children.Add
...
<Button>
<StackPanel Orientation="Horizontal" Margin="10">
<Image Source="foo.png"/>
</StackPanel>
</Button>
Ответы
Ответ 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")
};