创建具有透明"Windows"的自定义堆栈面板



晚上好。 我已经研究了我的问题大约两天了,并且已经尝试了至少十几种问题变体。 他们中的每一个都是完全失败的,所以我不会费心在这里发布任何代码。

我需要的是一个用于无边框窗口的StackPanel。 StackPanel 需要有一个不透明的背景,子级需要有一个透明的背景。 我需要透明度来一直通过子元素、StackPanel 和底层主窗口。

有没有人知道如何做到这一点,以及我应该从哪里开始?我是一名中级程序员,在这里遇到了坚实的墙壁。我试图从面板类继承,覆盖通常的嫌疑人;MeasureOverride、ArangeOveride、OnRender等。

我还有一个想法,是在父节点和所有子节点之间使用某种形式的组合几何。

提前感谢!!

您可能缺少的是Window.AllowsTransparency="True" 。可悲的是,您必须构建自己的窗口标题和边框WindowStyle因为属性必须设置为 None .

我为您创建了一个示例:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        AllowsTransparency="True"
        Background="Transparent"
        WindowStyle="None"
        WindowStartupLocation="CenterScreen">
    <Border BorderBrush="Black" BorderThickness="1">        
        <DockPanel>
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="Application">
                    <MenuItem Header="_Close" Click="MenuItem_Click"/>
                </MenuItem>
            </Menu>
            <ToolBar DockPanel.Dock="Bottom">
                <Button>sample button</Button>
            </ToolBar>
            <StackPanel>
                ... your whiteboard ...
            </StackPanel>
        </DockPanel>
    </Border>
</Window>

.

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}

好的,所以经过很多很多小时的蛮力"黑客攻击",我已经设法找到了一种方法来完成我需要的东西。

<Border Name="OuterBorder" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Orange" BorderThickness="1.5">
    <Border Name="FillerStrip" BorderBrush="Black" BorderThickness="20">
        <Border Name="InnerBorder" BorderBrush="Orange" BorderThickness="1.5">
            <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent">
                <local:GlassBoardControl BorderBrush="Orange"            BorderThickness="2" AxisBrush="LawnGreen" AxisThickness="15" x:Name="screen" />
            </StackPanel>
        </Border>    
    </Border>
</Border>

现在我唯一的问题是我到底如何创建一个自定义面板,因为它是边框? 关于我应该从哪里开始的任何想法将不胜感激。

最新更新