要するに:
私の目標は、コンテンツとして system.windows.controls.image (これからは画像) を持つことができる WPF/C#/XAML でボタン コントロールを作成することです。左上のピクセルを取得して、残りのコンテンツの背景は画像と同じ色です。画像の写真はプロジェクトのリソースです。今私の問題は、左上のピクセルを取得できないか、ボタンの画像を取得できないことです。グーグルで調べた後、いくつかの方法を試しました。
まず、画像を埋め込みリソースとして使用します。このようにして、画像の最初の 4 バイトを読み込むことで左上のピクセルを取得できますが、画像はボタンに表示されません。
2 番目: 写真をリソースとして使用します。このようにしてボタン上の画像を見ることができますが、画像にアクセスしようとすると、画像が存在しないというエラーメッセージでプログラムが壊れるため、ピクセルの色を取得できません。
詳細に:
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
}
最初にボタンを作成し、次にテキストをタグに渡します。コンテンツが画像かどうかを確認します。はいの場合、左上のピクセルを取得しようとします。今...
画像がリソースに埋め込まれている場合、プログラムは実行されますが、画像は表示されませんが (デザイナーからのみ、何らかの理由で)、ボタンの背景は完璧になります。
デザイナーからは、次のようになります。
しかし、(埋め込みリソースではなく) リソースとして使用しようとすると、そのようなリソースが利用できないため、中断されます。
左上隅を取得するために他の方法をチェックしましたが、コードを実行すると、存在しないというメッセージが表示されました-実行時、リソース...これまでのところ、これは私がまとめることができる最高の作業コードです.
質問は次のとおりです。
どうすれば画像も表示できますか、または左上のピクセルを取得するにはどうすればよいですか?