簡體   English   中英

當我實際上未在代碼中進行更改時,為什么橢圓的不透明度會自動更改?

[英]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;
    }

問題可能是您正在更改MouseEnterMouseExit事件中的透明度:

<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);

這兩行都指定alpha100 現在,在我們的decimal數學系統中,這將是完全有效的,並且意味着100%不透明度,但是在8-bit32-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行都更改為100255 ,就可以了。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM