Добавление изображения в кнопку WPF
Я попытался это решение:
<Button>
<StackPanel>
<Image Source="Pictures/img.jpg" />
<TextBlock>Blablabla</TextBlock>
</StackPanel>
</Button>
но я вижу изображение только в окне проекта, и когда я запускаю программу, она исчезает.
Если я попробую это:
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;
Я получаю системе"'.Окна.Разметка.XamlParseException' в PresentationFramework.dll файлы" исключение.
какое решение?
7 ответов
В случае "исчезновения" изображения есть несколько вещей, чтобы рассмотреть:
когда XAML не может найти ресурс, он может игнорировать его (когда он не будет бросать
XamlParseException
)-
ресурс должен быть правильно добавлен и определен:
убедитесь, что он существует в проекте, где ожидалось.
-
убедитесь, что он построен с вашего проекта ресурс.
(щелкните правой кнопкой мыши → Свойства → BuildAction= 'Resource')
другое дело попробовать в подобных случаях, что также полезно для повторного использования изображения (или любого другого ресурса):
определите свой образ как ресурс в XAML:
<UserControl.Resources>
<Image x:Key="MyImage" Source.../>
</UserControl.Resources>
и позже используйте его в желаемом элементе управления:
<Button Content="{StaticResource MyImage}" />
пожалуйста, попробуйте следующий фрагмент XAML:
<Button Width="300" Height="50">
<StackPanel Orientation="Horizontal">
<Image Source="Pictures/img.jpg" Width="20" Height="20"/>
<TextBlock Text="Blablabla" VerticalAlignment="Center" />
</StackPanel>
</Button>
в XAML элементы находятся в древовидной структуре. Таким образом, вы должны добавить дочерний элемент управления в родительский элемент управления. Ниже фрагмент кода работает нормально. Дайте имя корневой сетке XAML как "MainGrid".
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;
MainGrid.Children.Add(btn);
использование:
<Button Height="100" Width="100">
<StackPanel>
<Image Source="img.jpg" />
<TextBlock Text="Blabla" />
</StackPanel>
</Button>
это должно работать. Но помните, что вы должны иметь изображение, добавленное в ресурс вашего проекта!
вы можете установить фон кнопки на изображение, если вы хотите наложить текст.
<Button>
<Button.Background>
<ImageBrush ImageSource="/AssemblyName;component/Pictures/img.jpg"/>
</Button.Background>
<TextBlock>Blablabla</TextBlock>
</Button>
следите за синтаксисом источника изображения. См.этот вопрос за помощью.
Попробуйте ContentTemplate:
<Button Grid.Row="2" Grid.Column="0" Width="20" Height="20"
Template="{StaticResource SomeTemplate}">
<Button.ContentTemplate>
<DataTemplate>
<Image Source="../Folder1/Img1.png" Width="20" />
</DataTemplate>
</Button.ContentTemplate>
</Button>
у меня также была та же проблема. Я исправил это, используя следующий код.
<Button Width="30" Margin="0,5" HorizontalAlignment="Stretch" Click="OnSearch" >
<DockPanel>
<Image Source="../Resources/Back.jpg"/>
</DockPanel>
</Button>
Примечание: убедитесь, что действие сборки изображения в окне свойств должно быть Resource
.
Я обнаружил, что мне также пришлось установить модификатор доступа на вкладке ресурсы to 'Public' - по умолчанию он был установлен на внутренний, и мой значок появился только в режиме дизайна, но не при запуске приложения.