我正在嘗試創建一個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;
}
}
下面是節目的圖像:第一框包含顏色滑塊;第二個盒子包含彩色滑塊的顏色;第三個框包含第二個框中保存的顏色。
你在做什麼轉換'刷'到'布爾''bool bools = Convert.ToBoolean(savedColor.Background);'??? – ad1Dima
要保存的顏色值不是某個畫筆;畫筆可以代表各種顏色多樣的東西。你需要ColorSlider_ValueChanged中的Color.FromRGB()值。只需將它保存在私人領域。 –
我現在意識到自己並不像我想的那麼清楚。 (字節)slColorR.Value,(字節)slColorG.Value,(字節) 我使用Slider值0-255來表示每個相應的色譜,然後將這些值應用於 Color color = Color.FromRgb )slColorB.Value); 然後我申請並保存該顏色。 我想加載保存的顏色,然後將其分解爲各自的rgb值並將這些值放回到rgb滑塊中。 我只會保存滑塊值,但我收到的錯誤,我不能這樣做私人無效ColorSlider_ValueChanged類以外。 –