如何获取文本框的前景色和背景色以便在拾色器中进一步使用?
How to get foreground and background colors of textbox for further usage in Color Picker?
前景和背景属性为画笔类型。如何获取颜色以在拾色器中进一步使用?
我将前景和背景传递给属性 window 的 c-tor,如下所示:
private void Menu_Properties_OnClick(object sender, RoutedEventArgs e)
{
PropertiesDialog propDialog = new PropertiesDialog(TbTimer.Foreground, TimerPanel.Background);
if (propDialog.ShowDialog() == true)
{
//set color to TbTimer textbox and TimerPanel WrapPanel
}
}
TbTimer
是TextBox,TimerPanel
是WrapPanel。
这是属性 window c-tor:
public PropertiesDialog(Brush foreground, Brush background)
{
InitializeComponent();
FontColorPicker.SelectedColor = foreground; //Compilation error
BgColorPicker.SelectedColor = background; //Compilation error
}
这里我得到 Cannot implicitly convert type 'System.Windows.Media.Brush' to 'System.Windows.Media.Color'
.
如何获取笔刷颜色?
简单地改变你的方法签名:
public PropertiesDialog(System.Windows.Media.Color foreground, System.Windows.Media.Color background)
{
InitializeComponent();
FontColorPicker.SelectedColor = foreground;
BgColorPicker.SelectedColor = background;
}
SelectedColour 需要 System.Windows.Media.Color 类型,但是您正在尝试分配画笔...尝试按如下方式进行转换。
public PropertiesDialog(Brush foreground, Brush background)
{
InitializeComponent();
FontColorPicker.SelectedColor = ((SolidColorBrush)foreground).Color;
BgColorPicker.SelectedColor = ((SolidColorBrush)background).Color;
}
当您将 XAML 中元素的 Background
属性 设置为 "Red" 之类的内容时,类型转换器会将字符串 "Red" 转换为SolidColorBrush
对象,其 Color
属性 设置为适当的颜色。
所以这个:
<TextBlock Background="Red" />
相当于:
<TextBlock>
<TextBlock.Background>
<SolidColorBrush Color="Red" />
</TextBlock.Background>
</TextBlock>
SolidColorBrush
是唯一具有单个 "colour" 的笔刷类型。其他画笔类型可能有不止一种颜色,或者可能根本不代表 "colour"(例如 DrawingBrush
或 VisualBrush
)。
如果您希望对话框的构造函数将 Brush
个对象作为参数,但又想将它们作为单色处理,那么您需要按照@BenjaminPaul 的方法将它们转换为 SolidColorBrush
个对象回答。当然,画笔的类型实际上可能不同,因此显式转换会失败并出现异常。
你能做的最好的事情是这样的:
public PropertiesDialog(Brush foreground, Brush background)
{
InitializeComponent();
var solidForeground = foreground as SolidColorBrush;
var solidBackground = background as SolidColorBrush;
if (solidForeground == null || solidBackground == null)
{
// One or both of the brushes does not have a
// single solid colour; what you do here is up to you
throw new InvalidOperationException();
}
FontColorPicker.SelectedColor = solidForeground.Color;
BgColorPicker.SelectedColor = solidBackground.Color;
}
前景和背景属性为画笔类型。如何获取颜色以在拾色器中进一步使用?
我将前景和背景传递给属性 window 的 c-tor,如下所示:
private void Menu_Properties_OnClick(object sender, RoutedEventArgs e)
{
PropertiesDialog propDialog = new PropertiesDialog(TbTimer.Foreground, TimerPanel.Background);
if (propDialog.ShowDialog() == true)
{
//set color to TbTimer textbox and TimerPanel WrapPanel
}
}
TbTimer
是TextBox,TimerPanel
是WrapPanel。
这是属性 window c-tor:
public PropertiesDialog(Brush foreground, Brush background)
{
InitializeComponent();
FontColorPicker.SelectedColor = foreground; //Compilation error
BgColorPicker.SelectedColor = background; //Compilation error
}
这里我得到 Cannot implicitly convert type 'System.Windows.Media.Brush' to 'System.Windows.Media.Color'
.
如何获取笔刷颜色?
简单地改变你的方法签名:
public PropertiesDialog(System.Windows.Media.Color foreground, System.Windows.Media.Color background)
{
InitializeComponent();
FontColorPicker.SelectedColor = foreground;
BgColorPicker.SelectedColor = background;
}
SelectedColour 需要 System.Windows.Media.Color 类型,但是您正在尝试分配画笔...尝试按如下方式进行转换。
public PropertiesDialog(Brush foreground, Brush background)
{
InitializeComponent();
FontColorPicker.SelectedColor = ((SolidColorBrush)foreground).Color;
BgColorPicker.SelectedColor = ((SolidColorBrush)background).Color;
}
当您将 XAML 中元素的 Background
属性 设置为 "Red" 之类的内容时,类型转换器会将字符串 "Red" 转换为SolidColorBrush
对象,其 Color
属性 设置为适当的颜色。
所以这个:
<TextBlock Background="Red" />
相当于:
<TextBlock>
<TextBlock.Background>
<SolidColorBrush Color="Red" />
</TextBlock.Background>
</TextBlock>
SolidColorBrush
是唯一具有单个 "colour" 的笔刷类型。其他画笔类型可能有不止一种颜色,或者可能根本不代表 "colour"(例如 DrawingBrush
或 VisualBrush
)。
如果您希望对话框的构造函数将 Brush
个对象作为参数,但又想将它们作为单色处理,那么您需要按照@BenjaminPaul 的方法将它们转换为 SolidColorBrush
个对象回答。当然,画笔的类型实际上可能不同,因此显式转换会失败并出现异常。
你能做的最好的事情是这样的:
public PropertiesDialog(Brush foreground, Brush background)
{
InitializeComponent();
var solidForeground = foreground as SolidColorBrush;
var solidBackground = background as SolidColorBrush;
if (solidForeground == null || solidBackground == null)
{
// One or both of the brushes does not have a
// single solid colour; what you do here is up to you
throw new InvalidOperationException();
}
FontColorPicker.SelectedColor = solidForeground.Color;
BgColorPicker.SelectedColor = solidBackground.Color;
}