晚上好。 我已经研究了我的问题大约两天了,并且已经尝试了至少十几种问题变体。 他们中的每一个都是完全失败的,所以我不会费心在这里发布任何代码。
我需要的是一个用于无边框窗口的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>
现在我唯一的问题是我到底如何创建一个自定义面板,因为它是边框? 关于我应该从哪里开始的任何想法将不胜感激。