使用Transparent" Windows"创建自定义Stackpanel。

时间:2012-05-17 04:55:26

标签: wpf c#-4.0 wpf-controls

晚上好。我现在已经研究了我的问题大约两天了,并尝试了至少十几种问题。其中最后一个完全失败,所以我不打算在这里发布任何代码。

我需要的是无边框窗口的StackPanel。 StackPanel需要具有不透明背景,并且孩子需要具有透明背景。我需要透明度一直通过子元素,StackPanel和底层主窗口。

有没有人知道如何解决这个问题,我应该从哪里开始?我是一名中级程序员,在这里打了一个坚实的墙。我试图从Panel Class继承,超越了通常的嫌疑人; MeasureOverride,ArangeOveride,OnRender等。

我也有过一种想法,就是在父节点和所有子节点之间使用CombinedGeometry的某种形式。

提前致谢!!

2 个答案:

答案 0 :(得分:0)

你可能缺少的是Window.AllowsTransparency="True"。可悲的是,你必须建立自己的窗口标题和边框,因为{1} {}属性必须设置为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>

答案 1 :(得分:0)

好的,所以经过许多,几个小时的蛮力“黑客攻击”,我已经设法找到了实现我需要的方法。

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

现在我唯一的问题是,我是如何创建一个自定义面板作为它的边界?关于我应该从哪里开始的任何想法都将非常感激。