[英]Why is the opacity of my ellipse changing automatically when I don't actually change it in the code?
我的Windows Universal應用程序中有一個橢圓,當鼠標進入並離開該橢圓時,我想更改其填充顏色。 我只想改變顏色,別無其他。 但是,每當我進入鼠標時,不透明度會自動降低。 您能在我的代碼中找出問題嗎?
謝謝。
XAML
<Ellipse x:Name="glamourEllipse" HorizontalAlignment="Left" Height="226" Margin="594,260,0,0" Stroke="#FFB43F3F" VerticalAlignment="Top" Width="226" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto" Tapped="glamour_Tapped">
<Ellipse.Fill>
<SolidColorBrush Color="#FFB43C3C"/>
</Ellipse.Fill>
<Ellipse.RenderTransform>
<CompositeTransform Rotation="-90.254"/>
</Ellipse.RenderTransform>
</Ellipse>
C#
SolidColorBrush hoverBrush = new SolidColorBrush();
private void mouse_Enter(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(100, 140, 40, 40);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
private void mouse_Exit(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(100, 180, 60, 60);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
問題可能是您正在更改MouseEnter
和MouseExit
事件中的透明度:
<SolidColorBrush Color="#FFB43C3C"/>
該行將顏色設置為255 alpha, 180 red, 60 green and 60 blue
。 另一方面,您的代碼:
hoverBrush.Color = Color.FromArgb(100, 140, 40, 40);
hoverBrush.Color = Color.FromArgb(100, 180, 60, 60);
這兩行都指定alpha
為100
。 現在,在我們的decimal
數學系統中,這將是完全有效的,並且意味着100%
不透明度,但是在8-bit
和32-bit
計算機環境中,則不是。 基本上,該代碼將alpha設置為64
十六進制。 (在XAML中更改FF
,您將看到透明性是相同的。)
Color.FromArgb
重載期望0
是透明的,而255
是不透明的。
https://msdn.microsoft.com/zh-CN/library/system.drawing.color.fromargb%28v=vs.110%29.aspx
基本上,將這兩行Color.FromArgb
行都更改為100
到255
,就可以了。
private void mouse_Enter(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(255, 140, 40, 40);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
private void mouse_Exit(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(255, 180, 60, 60);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
或者,完全刪除該值。
private void mouse_Enter(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(140, 40, 40);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
private void mouse_Exit(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(180, 60, 60);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
這兩個選項總體上具有相同的效果。 第二個也保證您不會再次出錯,因為alpha
始終為255
。
編輯:最后,為了完整起見,您也可以在代碼中使用十六進制,這可能是更好的選擇,因為所有方式都相同:
private void mouse_Enter(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(0xFF, 0x8C, 0x28, 0x28);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
private void mouse_Exit(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(0xFF, 0xB4, 0x3C, 0x3C);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
要么:
private void mouse_Enter(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(0x8C, 0x28, 0x28);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
private void mouse_Exit(object sender, PointerRoutedEventArgs e)
{
hoverBrush.Color = Color.FromArgb(0xB4, 0x3C, 0x3C);
hoverBrush.Opacity = 1;
nsfwEllipse.Fill = hoverBrush;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.