【问题标题】:Why is the opacity of my ellipse changing automatically when I don't actually change it in the code?当我实际上没有在代码中更改它时,为什么我的椭圆的不透明度会自动改变?
【发布时间】:2015-05-15 20:24:42
【问题描述】:

我的 Windows 通用应用程序中有一个椭圆,我想在鼠标进入和离开该椭圆时更改其填充颜色。我想做的就是改变颜色,别无其他。但是,每当我输入鼠标时,不透明度就会自动降低。你能找出我的代码中的问题吗?

谢谢。

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

【问题讨论】:

  • 您是否在某处设置了动画,例如样式?
  • 试试Color.FromArgb(255, 140, 40, 40)Color.FromArgb(255, 180, 60, 60)
  • @EBrown 工作。谢谢。
  • @RonBeyer 它在没有动画的情况下工作。我真的需要设置动画吗/
  • @user3716672 不,他只是想确保您没有不小心在任何地方设置动画。

标签: c# visual-studio xaml win-universal-app


【解决方案1】:

问题可能是您正在更改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);

这两行都指定了100 中的alpha。现在,在我们的decimal 数学系统中,这将是完全有效的并且意味着100% 不透明度,但在8-bit32-bit 的计算机世界中,它不是。基本上,该代码将 alpha 设置为 64 hex。 (更改XAML中的FF,你会看到透明度是一样的。)

Color.FromArgb 的重载要求 0 是透明的,而 255 是不透明的。

https://msdn.microsoft.com/en-us/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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 2012-04-10
    • 2020-10-08
    • 2015-06-17
    • 1970-01-01
    • 2023-02-20
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多