3つのスライダーバー(赤、緑、青)に基づいて色を選択できる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;
}
}
は、番組の画像である:最初のボックスは、カラースライダを含み、 2番目のボックスにはカラースライダの色が含まれています。 3番目のボックスには2番目のボックスから保存された色が含まれます
'Brush'を' bool'に変換しようとしていますか?bool bools = Convert.ToBoolean(savedColor.Background); '??? – ad1Dima
保存したいカラー値はブラシではありません。ブラシは、多くの色を持つあらゆる種類のものを表すことができます。 ColorSlider_ValueChangedで取得したColor.FromRGB()値が必要です。それをプライベートフィールドに保存するだけです。 –
今私は私が思ったほど明確ではなかったことを理解しています。 Sliderの値0〜255を使用して、それぞれの色のスペクトルを表してから、それらの値を適用します。 色の色= Color.FromRgb((byte)slColorR.Value、(byte)slColorG.Value、 )slColorB.Value); この色を適用して保存します。 保存された色を読み込み、それをそれぞれのRGB値に分解し、それらの値をRGBスライダに戻したいとします。 私はスライダーの値を保存するだけですが、private void ColorSlider_ValueChangedクラスの外ではできないエラーが発生します。 –