이 질문은 매우 기본적인 것 같지만 WPF는 속성 (예 : 배경)을 두 번째로 변경하지만 첫 번째 클릭을 변경하지 않는 이유는 무엇입니까? ViewModel을 사용하여 내 UI의 값을 저장합니다. 따라서 사용자가 저장 버튼을 클릭하면 쉽게 액세스 할 수 있습니다.UIElement는 처음에 속성을 변경하지 않습니다.
뷰 모델은 여기에 몇 가지 속성이 포함되어 있습니다 만 발췌 한 것입니다
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 마크 업입니다 :
<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 이벤트 핸들러 :
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가 열리지 만 확인을 클릭하면 패널이 색상을 변경하지 않습니다. 이 작업을 다시 수행하고 선택을 제출할 때만 이전에 선택한 색상이 나타납니다.
누군가가 내게 무엇이 잘못되었는지 말해 줄 수 있습니까?
제목에 태그를 넣지 마십시오. 태그 섹션은 다른 사용자가 올바르게 색인하고 인식 할 수 있도록합니다. – Tseng