UserControl中的图像使UserControl不可见,但使Window背景可见

时间:2019-04-08 10:59:14

标签: c# wpf user-controls

我以this为例,制作了圆形的玻璃按钮,并以最小的影响从中制作了一个用户控件。第三个按钮是用户控制中的我按钮,其他所有按钮-示例中的原始按钮:(抱歉,声誉不足以使图像以舒适的方式放置)

https://i.imgur.com/aBE8AjQ.png

但是在我将图像添加到Control之后,我看到了

https://i.imgur.com/FYPItVf.png

将图像添加到第二个按钮的方式相同

            <Button Style="{StaticResource GlassButton}" Width="50" Height="50" Background="#FF1D5BBA"  Margin="10">
                <Image Width="40" Height="35" Source="images\vista_flag.png"/>
            </Button>

            <GlassButtonControl:GlassButton Width="70" Height="70" Margin="0">
                <Image Width="40" Height="35" Source="images\vista_flag.png"/>
            </GlassButtonControl:GlassButton>

Full solution

我在做什么错了?

EDIT1-> EDIT3

EDIT2:

彼得·杜尼奥(Peter Duniho)要求,用于重现大小写的最少代码

UserControl项目的XAML。具有彩色背景的按钮:

<UserControl x:Class="GreenButtonControl.GreenButton"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:GreenButtonControl"
             mc:Ignorable="d" 
             d:DesignHeight="400" d:DesignWidth="400">
    <Grid>
        <Button Width="50" Height="50" Background="Green"  Margin="10"/>
    </Grid>
</UserControl>

UserControl项目的C#:

using System.Windows.Controls;

namespace GreenButtonControl
{
    public partial class GreenButton : UserControl
    {
        public GreenButton()
        {
            InitializeComponent();
        }
    }
}

Window XAML(图像本身应更改为具有透明性的任何图像):

<GreenButtonControl:GreenButton Width="50" Height="50">
    <Image Width="40" Height="40" Source="images\vista_flag.png"/>
</GreenButtonControl:GreenButton>

问题在于UserControl消失,并且透明背景下显示了窗口背景。

EDIT3:

我现在发现可以避免这种行为的解决方案:

  1. 将图像放在UserControl代码中,并设置参数以从Window代码中对其进行设置。
  2. 将图像放置在控件内而不是控件内:
            <Grid Width="70" Height="70">
                <GlassButtonControl:GlassButton/>
                <Image Width="40" Height="40" Source="images\vista_flag.png"/>
            </Grid>

但是,这带来了新的问题来捕捉触发器“ MouseOver”和其他触发器...

  1. 将UserControl放置在容器中,并使图像对鼠标事件透明
            <Grid Width="50" Height="50">
                <GreenButtonControl:GreenButton Width="Auto" Height="Auto"/>
                <Image Width="40" Height="40" IsHitTestVisible="False" Source="images\vista_flag.png"/>
            </Grid>

这是目前所需行为的完美决定

但是问题仍然是。为什么任何内部元素使UserControl不可见?

0 个答案:

没有答案