在WPFbutton中添加图像
我试过这个解决scheme:
<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;
我得到了“PresentationFramework.dll”中的“System.Windows.Markup.XamlParseException”exception。
你能帮我find解决办法吗? 谢谢。
在“缺失”图像的情况下,有几件事情需要考虑:
-
当Xaml找不到资源时,它可能会忽略它(当它不会抛出
XamlParseException
) -
资源必须正确添加和定义:
-
确保它存在于您的项目预期的地方。
-
确保它是与您的项目一起构build的资源。
(右键 – >属性 – > BuildAction ='资源')
-
在类似的情况下尝试另一种方法,这对于重用图像(或任何其他资源)也是有用的:
在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>
应该pipe用。 但是,请注意,您必须将图像添加到项目的资源中!
如果要覆盖文本,可以将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>