これは非常に基本的な質問ですが、WPFは最初のクリックではなく2番目のプロパティ(例:背景)を変更しないのはなぜですか?私はViewModelを使用して、私のUIから値を格納します。したがって、ユーザーが[保存]ボタンをクリックすると、簡単にアクセスできます。UIElementは最初のクリックでプロパティを変更しません
のViewModelはただの抜粋です、ここで、いくつかのプロパティが含まれています
<StackPanel
x:Name="rootElement"
Orientation="Horizontal"
Height="Auto" Width="Auto">
<StackPanel.DataContext>
<local:BarcodeViewModel />
</StackPanel.DataContext>
<!-- Some more UI elements -->
<StackPanel
x:Name="pForeColor"
Background="{Binding ForeColor}"
Width="Auto" Height="23"
Margin="5,0,5,0"
MouseDown="pForeColor_MouseDown"/>
</StackPanel>
そして最後にではなく、少なくとものMouseDownイベントハンドラ:
using System;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using Drawing = System.Drawing;
using Media = System.Windows.Media;
using BarcodeLib;
namespace BarcodeEncoder
{
class BarcodeViewModel : INotifyPropertyChanged
{
// Some more properties
private Media.Brush foreColor;
public Media.Brush ForeColor
{
get { return this.foreColor; }
set
{
if (this.foreColor != value)
this.OnPropertyChanged("ForeColor");
this.foreColor = value;
}
}
private Media.Brush backColor;
public Media.Brush BackColor
{
get { return this.backColor; }
set
{
if (this.backColor != value)
this.OnPropertyChanged("BackColor");
this.backColor = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public BarcodeViewModel()
{
// Initialisation of the other properties
this.ForeColor = new Media.SolidColorBrush(Media.Colors.Black);
this.BackColor = new Media.SolidColorBrush(Media.Colors.White);
}
}
}
そして、ここではrelevan XAMLマークアップであります
private void pForeColor_MouseDown(object sender, MouseButtonEventArgs e)
{
using (var cd = new Forms.ColorDialog())
{
if (cd.ShowDialog() == Forms.DialogResult.OK)
this.bcvm.ForeColor = new Media.SolidColorBrush()
{
Color = Media.Color.FromArgb(cd.Color.A, cd.Color.R, cd.Color.G, cd.Color.B)
};
}
}
StackPanelの色を設定しようとすると、pForeColor
では、ColorDialogが開きますが、[OK]をクリックするとパネルの色は変わりません。これを再度実行して選択を送信する場合にのみ、前に選択した色が表示されます。
誰かが私にここで間違っていることを教えてもらえますか?
イベントを発生させ、確認してください。タグセクションは、それらが正しくインデックスされ、他のユーザーによって認識されることを保証します – Tseng