简而言之:
我的目标是在WPF / C#/ XAML中创建一个按钮控件,它可以将system.windows.controls.image(从现在开始:image)作为内容,我想把它放在左上角的像素上并使内容背景的其余部分与图像具有相同的颜色。图像的图片是项目的资源。现在我的问题是,我根本无法获得左上角的像素,或者我无法获得按钮上的图片。经过一些谷歌搜索,我尝试了几种方法。
第一: 我使用图片作为嵌入资源。 这样我可以通过加载图片的前4个字节来获得左上角的像素,但图片不会显示在按钮上。
第二: 我用图片作为资源。 这样我就能看到按钮上的图像,但是我无法获得像素颜色,因为当我尝试访问图片时,它会破坏程序,并显示有关图片不存在的错误消息。
详细信息:
app.xaml中的按钮:
<Style TargetType="Button" BasedOn="{StaticResource GombAlap}" x:Key="GombM">
<!-- BasedOn="{StaticResource {x:Type Button}}" -->
<Setter Property="Width" Value="200" />
<Setter Property="Margin" Value="0,0,10,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Grid Background="{TemplateBinding Background}" Opacity="0.2" />
<DockPanel Margin="{TemplateBinding Padding}">
<Grid Background="White" DockPanel.Dock="Bottom" Visibility="{TemplateBinding Tag, Converter={StaticResource StringEmptyVisibleVagyCollapse}}">
<TextBlock Text="{TemplateBinding Tag}" />
</Grid>
<!-- kép -->
<Viewbox Margin="{TemplateBinding Padding}">
<ContentPresenter Margin="{TemplateBinding Padding}" />
</Viewbox>
</DockPanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是一个简单的东西:我使用button.tag作为文本(如果没有给出,我隐藏该区域)。内容可以是任何内容,并覆盖按钮的其余部分。
我尝试使用的代码(抱歉没有翻译评论):
ÚjMenüpont("Exit to Windows", FStatic.ImageResourceből("../Gombok/Windows8.png"), delegate { Close(); }); //kilépés gomb
这会调用按钮初始值设定项。参数是:文本,图像和单击处理程序。所以这只是关闭主窗口。让我们看看首先加载图像的是什么:
public static Image ImageResourceből(string Név)
{
Image eredmény = new Image();
BitmapImage bi = new BitmapImage(new Uri(Név, UriKind.RelativeOrAbsolute));
eredmény.Source = bi;
return eredmény;
}
这实际上有效..加载图像,就是这样。让我们看看上面调用的ÚjMenüpont代码:
void ÚjMenüpont(string Név, object Tartalom, Action Feladat)
{
Button új = new Button(); //új gomb
új.Tag = Név; //ez lesz az alsó szöveg
új.Content = Tartalom; //ez az objektum lesz a főrészen
if (Tartalom is Image)
{
//ha tartalom kép, a színt a bal felső sarokhoz igazítom
Image képként = Tartalom as Image; //képként értelmezem
var balfelső = new byte[4]; //buffer
Assembly futtató = Assembly.GetExecutingAssembly();
System.Drawing.Image kép = System.Drawing.Bitmap.FromStream(futtató.GetManifestResourceStream(
futtató.FullName.Substring(0, futtató.FullName.IndexOf(",")).Replace(" ", "_").Replace("../", string.Empty) + "." + képként.Source.ToString().Replace("../", string.Empty).Replace("/", ".")
));
System.Drawing.Color szín = ((System.Drawing.Bitmap)(kép)).GetPixel(0, 0);
új.Background = new SolidColorBrush(Color.FromRgb(szín.R, szín.G, szín.B));
//új.Content = ZXF.Konvertálók.KonvertálImagera.Graphicsból(System.Drawing.Graphics.FromImage(kép));
}
új.Click += new RoutedEventHandler( //gombnyomáskor ez történik
delegate(object sender, RoutedEventArgs args) //anoním eljárás click paramétereivel
{
//végrehajtom a feladatot
Feladat(); //ami a paraméter
}
);
Menü.Children.Add(új); //menüsávra teszem
}
首先创建按钮,然后将文本传递给标记。检查内容是否是图像。如果是,它将尝试获得左上角的像素。现在...
当图片是嵌入资源时,程序将运行但不会显示图像(仅限设计师,有些人),但按钮背景将是完美的。
从设计师看起来像这样:
但是当我尝试使用资源(而不是嵌入式资源)时,我会休息一下,因为没有这样的资源:
我检查了其他方法以获得左上角,但是当我运行代码时,我收到了不存在的消息 - 在运行时,对于资源...到目前为止,这是我可以放在一起的最佳工作代码
所以问题是:
我怎样才能显示图片,或者如何获得左上角的像素?