当我设置Image
来填充窗口时,它似乎呈现在其他控件的顶部,并且通常会弄乱窗口。文件中的顺序似乎没有帮助,但是如果我把它放在它自己的Page
部分中,那么它的行为会更好 。
有没有办法在窗口中的所有内容后面显示图像?
此外,其他控件似乎没有正确渲染它们(文本有白色背景,按钮有白色方块),我猜他们需要在某处设置透明模式?
编辑:
以下是问题的示例,鼠标悬停时可以看到按钮和复选框,以及选择的文字:
答案 0 :(得分:8)
我无法让Image
作为背景工作,但是我能够使用窗口背景得到我想要的东西。
Window
允许您使用Theme/@ImageFile
中指定的图片,然后将Window/@SourceX
和Window/@SourceY
偏移指定为0.但这还不够, Window
引用的字体背景将覆盖窗口图像背景。您需要使用没有指定背景的字体。
<Theme xmlns="http://wixtoolset.org/schemas/thmutil/2010" ImageFile="background.png"> <Window Width="485" Height="300" HexStyle="100a0000" FontId="0" SourceX="0" SourceY="0">#(loc.Caption)</Window> <Font Id="0" Height="-12" Weight="500" Foreground="000000"Background="FFFFFF">Segoe UI</Font>
还有其他两个问题需要解决:
答案 1 :(得分:4)
是的,有可能。如果您的主题中的所有页面都具有相同的静态图像,则可以将Image
元素放在所有页面元素上方。 (可选)如果您想要每页不同的背景,请将图像放在页面的第一位。我像这样组织我的主题:
<Theme>
<Window />
<Font /> <!-- as many as necessary -->
<Image /> <!-- global background image -->
<Page> <!-- repeat for each page -->
<Image /> <!-- per-page background image -->
<other controls />
控制元素的顺序反向定义Z顺序。第一个控件位于底部,控件向下从顶部堆叠。这就是为什么背景Image
必须是第一个。
对于透明文本,可以有不同程度的善意。首先要删除白色背景,您需要从用于透明文本的Background
元素中删除Font
属性。缺少Background
属性意味着对文本使用空刷,这基本上是透明的。
透明度的好坏程度取决于控制。复选框似乎从不尊重透明文本。此外,如果重新绘制透明文本,则效果不佳。你会看到遗留下来的旧文本。因此,透明度仅适用于未更新的Text
。
无论如何,希望上面的内容能让你开始。如果您想为提高透明度或主题做出贡献,我建议您查看src\dutil\thmutil.cpp
中的代码。也许你可以让我们弄清楚如何让它完美运作。
答案 2 :(得分:4)
我在尝试主题WIX时发现了键字段。
可见= “是”
不表示元素可见。 这意味着元素始终可见。在每一页上。