세 개의 슬라이더 막대 (빨강, 녹색 및 파랑)를 기반으로 색상을 선택할 수 있도록 WPF 프로그램을 만들려고합니다 (적용) 슬라이더의 rgb 값에 따라 샘플 상자 및 나중에 저장 상자에 저장됩니다.C#/WPF 이중 변환 색상
문제점 : 저장된 색상을 나중에 저장하기 상자에서 다시 슬라이더 값으로 되돌릴 수있는 값으로 변환하는 방법을 알 수 없습니다. 저장된 색상을 적용 할 수는 있지만 원하는 색상의 값입니다. 이 코드는 클릭하여 Click_savedColor를 시작할 때까지 컴파일되고 실행됩니다. 그러면 프로그램이 멈 춥니 다.
WPF 코드 :
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="10" VerticalAlignment="Center">
<DockPanel VerticalAlignment="Center" Margin="10">
<Label DockPanel.Dock="Left" FontWeight="Bold">R:</Label>
<TextBox Text="{Binding ElementName=slColorR, Path=Value, UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Right" TextAlignment="Right" Width="40" />
<Slider Name="slColorR" Maximum="255" TickPlacement="BottomRight" TickFrequency="1" IsSnapToTickEnabled="True" ValueChanged="ColorSlider_ValueChanged" />
</DockPanel>
<DockPanel VerticalAlignment="Center" Margin="10">
<Label DockPanel.Dock="Left" FontWeight="Bold">G:</Label>
<TextBox Text="{Binding ElementName=slColorG, Path=Value, UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Right" TextAlignment="Right" Width="40" />
<Slider Name="slColorG" Maximum="255" TickPlacement="BottomRight" TickFrequency="1" IsSnapToTickEnabled="True" ValueChanged="ColorSlider_ValueChanged" />
</DockPanel>
<DockPanel VerticalAlignment="Center" Margin="10">
<Label DockPanel.Dock="Left" FontWeight="Bold">B:</Label>
<TextBox Text="{Binding ElementName=slColorB, Path=Value, UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Right" TextAlignment="Right" Width="40" />
<Slider Name="slColorB" Maximum="255" TickPlacement="BottomRight" TickFrequency="1" IsSnapToTickEnabled="True" ValueChanged="ColorSlider_ValueChanged" />
</DockPanel>
</StackPanel>
<GridSplitter Name="test" HorizontalAlignment="Center"/>
<Button Name="compColor" Grid.Column="2" Click="Click_compColor"/>
<GridSplitter HorizontalAlignment="Right"/>
<Button Name="savedColor" Grid.Column="3" Click="Click_savedColor"/>
</Grid>
C# 코드 : 아래
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ColorSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Color color = Color.FromRgb((byte)slColorR.Value, (byte)slColorG.Value, (byte)slColorB.Value);
compColor.Background = new SolidColorBrush(color);
}
void Click_compColor(object sender, RoutedEventArgs e)
{
savedColor.Background = compColor.Background;
}
void Click_savedColor(object sender, RoutedEventArgs e)
{
bool bools = Convert.ToBoolean(savedColor.Background);
byte[] bytes = BitConverter.GetBytes(bools);
slColorR.Value = Convert.ToDouble(bytes[0]);
slColorG.Value = Convert.ToDouble(bytes[1]);
slColorB.Value = Convert.ToDouble(bytes[2]);
compColor.Background = savedColor.Background;
}
}
프로그램의 이미지입니다 : 첫 번째 상자는 색상 슬라이더를 포함 두 번째 상자에는 색상 슬라이더의 색상이 포함되어 있습니다. 세 번째 상자는 두 번째 상자에서 저장된 색을 포함합니다.
'Brush'를'bool'로 변환하려고합니다. bool bools = Convert.ToBoolean (savedColor.Background);'??? – ad1Dima
저장하려는 색상 값이 일부 브러시가 아닙니다. 브러시는 다양한 색상을 가진 모든 종류의 것을 나타낼 수 있습니다. ColorSlider_ValueChanged에있는 Color.FromRGB() 값을 원합니다. 개인 필드에 저장하십시오. –
나는 이제 내가 내가 생각한 것만 큼 명확하지 않다는 것을 깨닫는다. Slider 값 0-255를 사용하여 각각의 색상 스펙트럼을 표현한 다음 해당 값을 에 입력합니다. 색상 color = Color.FromRgb ((byte) slColorR.Value, (byte) slColorG.Value, (byte) slColorB.Value); 그러면 해당 색상이 적용되고 저장됩니다. 저장 한 색상을로드 한 다음 해당 색상을 각각의 rgb 값으로 나누고 해당 값을 rgb 슬라이더에 다시 넣고 싶습니다. 난 그냥 슬라이더 값을 저장하지만 내가 할 수없는 오류가 나타납니다 개인 무효 ColorSlider_ValueChanged 클래스. –